Это может быть очень глупый вопрос, но у меня есть следующие строки кодирования, которые конвертируют RAW-изображения в BitmapImages:
public async void CreateImageThumbnails(string imagePath, int imgId)
{
await Task.Run(() => controlCollection.Where(x => x.ImageId == imgId).FirstOrDefault().ImageSource = ThumbnailCreator.CreateThumbnail(imagePath));
}
который вызывает этот метод CreateThumbnail()
public static BitmapImage CreateThumbnail(string imagePath)
{
var bitmap = new BitmapImage();
using (var stream = new FileStream(imagePath, FileMode.Open, FileAccess.Read))
{
bitmap.BeginInit();
bitmap.DecodePixelWidth = 283;
bitmap.CacheOption = BitmapCacheOption.OnLoad;
bitmap.StreamSource = stream;
bitmap.EndInit();
}
bitmap.Freeze();
GC.WaitForPendingFinalizers();
GC.Collect();
return bitmap;
}
При использовании async Void
вместо async Task
в моем методе CreateImageThumbnails
мое приложение обрабатывает изображения (29 из них) примерно на 11 секунд быстрее, чем async Task
. Почему это должно быть?
Использование памяти намного больше использует void
, но операция выполняется намного быстрее. У меня мало знаний о потоковом, вот почему я задаю этот вопрос. Может кто-нибудь объяснить, почему это происходит?
Также я провел некоторое исследование о том, когда и когда не использовать async Void
, но я не смог найти ответ на мой вопрос. (Я бы просто не очень хорошо выглядел).
Спасибо.