Đây có thể là một câu hỏi rất ngu ngốc, nhưng tôi có những dòng sau của mã hóa chuyển đổi ảnh RAW để BitmapImages:async công tác vs async trống
public async void CreateImageThumbnails(string imagePath, int imgId)
{
await Task.Run(() => controlCollection.Where(x => x.ImageId == imgId).FirstOrDefault().ImageSource = ThumbnailCreator.CreateThumbnail(imagePath));
}
trong đó kêu gọi phương pháp này 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;
}
Khi sử dụng async Void
thay vì async Task
trong phương pháp CreateImageThumbnails
của tôi, ứng dụng của tôi xử lý hình ảnh (29 trong số đó) khoảng 11 giây nhanh hơn async Task
. Tại sao điều này lại là?
Việc sử dụng bộ nhớ nhiều hơn nữa sử dụng void
, nhưng các hoạt động được hoàn thành nhiều nhanh hơn. Tôi có ít kiến thức về luồng, đây là lý do tại sao tôi hỏi câu hỏi này. Ai đó có thể vui lòng giải thích tại sao điều này xảy ra?
Ngoài ra tôi đã thực hiện một số nghiên cứu về thời gian và thời điểm không sử dụng async void
, nhưng tôi không thể tìm thấy câu trả lời cho câu hỏi của mình. (Tôi có thể không tìm kiếm rất tốt).
Cảm ơn bạn.
Có thể điều này sẽ giúp: https://stackoverflow.com/questions/12144077 –
'async void' là lửa và quên, vì vậy không có gì theo dõi hoạt động không đồng bộ (hoặc thậm chí đảm bảo hoạt động hoàn toàn), trong khi' không đồng bộ Task' thực sự giữ một ca khúc có thể được chờ đợi. – poke
Bạn có đang chờ nhiệm vụ khi đang sử dụng Tác vụ không? – Magnus