В вашем коде ваше первое ожидание выполнения задачи, но вы не запустили ее, так что она ждет бесконечно. Попробуйте следующее:
Task task = GetCustomers();
task.RunSynchronously();
Изменить:
Вы говорите, что получаете исключение. Пожалуйста, напишите более подробную информацию, включая трассировку стека. Mono содержит следующий тестовый пример:
[Test]
public void ExecuteSynchronouslyTest ()
{
var val = 0;
Task t = new Task (() => { Thread.Sleep (100); val = 1; });
t.RunSynchronously ();
Assert.AreEqual (1, val);
}
Проверьте, работает ли это для вас. Если это не так, но очень маловероятно, у вас может быть некоторая нечетная сборка Async CTP. Если это сработает, вам может потребоваться изучить, что именно генерирует компилятор, и как Task
экземпляр отличается от этого образца.
Редактировать # 2:
Я проверил с Reflector, что описанное вами исключение возникает, когда m_action
- null
. Это странно, но я не эксперт в Async CTP. Как я уже сказал, вы должны декомпилировать свой код и посмотреть, как именно создается Task
, каким образом его m_action
является null
.
P.S. В чем дело с случайными сокращениями? Учиться разрабатывать?
var qualityEncoder = Encoder.Quality;
var quality = (long)<desired quality>;
var ratio = new EncoderParameter(qualityEncoder, quality );
var codecParams = new EncoderParameters(1);
codecParams.Param[0] = ratio;
var jpegCodecInfo = <one of the codec infos from ImageCodecInfo.GetImageEncoders() with mime type = "image/jpeg">;
bmp.Save(fileName, jpegCodecInfo, codecParams); // Save to JPG
public static class BitmapExtensions
{
public static void SaveJPG100(this Bitmap bmp, string filename)
{
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
bmp.Save(filename, GetEncoder(ImageFormat.Jpeg), encoderParameters);
}
public static void SaveJPG100(this Bitmap bmp, Stream stream)
{
EncoderParameters encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
bmp.Save(stream, GetEncoder(ImageFormat.Jpeg), encoderParameters);
}
public static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid)
{
return codec;
}
}
return null;
}
}
Просто хочу сказать, что JPEG является по своей природе форматом с потерями. Таким образом в thoery даже при самых высоких настройках Вы собираетесь иметь некоторую информационную потерю, но это во многом зависит от изображения. Но png без потерь.
Существенно Вы не будете в состоянии сохранить то же качество, потому что jpg (насколько я знаю), всегда с потерями даже с максимально возможными качественными настройками.
, Если разрядно-точное качество действительно важно, рассмотрите использование png, который имеет некоторые режимы, которые без потерь.
Можно попробовать:
Bitmap.InterpolationMode = InterpolationMode.HighQualityBicubic;
и
Bitmap.CompositingQuality = CompositingQuality.HighQuality;
, Который действительно сохраняет качество довольно высоко, но не максимально возможное.