這可能是一個非常愚蠢的問題,但我有編碼的以下行是轉換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