这可能是一个非常愚蠢的问题,但我有编码的以下行是转换RAW图像BitmapImages:异步任务VS异步无效
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;
}
当在我的CreateImageThumbnails
方法中使用async Void
而不是async Task
时,我的应用程序处理图像(其中29个)比async Task
快11秒。为什么会这样?
的内存使用情况是使用void
得多,但操作完成多更快。我对线程知之甚少,这就是为什么我问这个问题。有人可以解释为什么会发生这种情况吗?
此外,我已经做了一些研究,何时何时不使用async void
,但我无法找到我的问题的答案。 (我可能没有很好地搜索)。
谢谢。
也许这将有助于:https://stackoverflow.com/questions/12144077 –
'异步无效'是火和遗忘,所以没有任何人跟踪异步操作(或者甚至确保它完全运行),而'异步任务'实际上保持了一个可以等待的轨道。 – poke
当您使用任务时,您是否在等待任务? – Magnus