Dies könnte eine sehr dumme Frage, aber ich habe die folgenden Zeilen der Codierung, die RAW-Bilder BitmapImages konvertieren:async Aufgabe vs async Leere
public async void CreateImageThumbnails(string imagePath, int imgId)
{
await Task.Run(() => controlCollection.Where(x => x.ImageId == imgId).FirstOrDefault().ImageSource = ThumbnailCreator.CreateThumbnail(imagePath));
}
, die diese Methode aufruft 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;
}
wenn async Void
statt async Task
in meiner CreateImageThumbnails
Methode verarbeitet meine Anwendung die Bilder (29 von ihnen) etwa 11 Sekunden schneller als async Task
. Warum sollte das sein?
Der Speicherverbrauch ist viel mehr void
verwenden, aber die Operation ist viel schneller abgeschlossen. Ich habe wenig Ahnung von Threading, deshalb stelle ich diese Frage. Kann jemand bitte erklären, warum das passiert?
Auch habe ich einige der Forschung getan auf, wenn und wann nicht async void
zu verwenden, aber ich konnte keine Antwort auf meine Frage finden. (Ich hätte vielleicht nicht sehr gut gesucht).
Vielen Dank.
Vielleicht wird dies helfen: https://stackoverflow.com/questions/12144077 –
'async void' ist Feuer und vergessen, also nichts hält von dem Asynchron-Betrieb Spur (oder sogar stellt sicher, dass es vollständig ausgeführt wird), während' async Task "hält tatsächlich eine Spur, auf die man warten kann. – poke
Warten Sie auf die Aufgabe, wenn Sie Task verwenden? – Magnus