Sagen Sie zum Beispiel, das ich eine Methode, die einige Daten in eine DateiWie vermeidet man eine Explosion von asynchronen Methoden bei der Einführung einer einfachen Wartezeit?
public void Foo()
{
using (var file = File.OpenWrite(@"C:\Temp\foo.txt"))
{
var writer = new StreamWriter(file);
writer.WriteLine("foo");
// some other code
}
}
Dies führt zu einer geringen Menge an Verzögerung schreibt. Ich entscheide mich, es zu beheben, indem ich Asynchronous IO benutze. Ich meine Methode wie folgt ändern:
public async Task FooAsync()
{
using (var file = File.OpenWrite(@"C:\Temp\foo.txt"))
{
var writer = new StreamWriter(file);
await writer.WriteLineAsync("foo");
// some other code
}
}
Da async void
gesagt wird böse sein, ich ändern den Rückgabetyp Task
.
Jetzt in der aufrufenden Methode habe ich eine nicht erwartete Task
, die schlecht ist. Also ändere ich die Signatur dieser Methode zu async Task
auch. Gleiches gilt für die Eltern dieser Methode. Dann ist diese Methode Teil einer Schnittstelle, die void
zurückgeben soll, also ändere ich die Methode in der Schnittstelle, um Task
zurückzugeben. Aber es gibt eine andere Implementierung, die nun auch Task
zurückgeben muss. Ich repariere das, einige Anrufmethoden, etc.
Jetzt gibt es 20 async
Methoden und 2 Stunden Zeit verbracht, alle, weil ich eine einfache asynchrone Datei schreiben wollte.
Wie soll ich das vermeiden? Sollte ich irgendwann einmal auf einen zurückgesandten Task
nicht warten? Oder muss ich wirklich alles durchmachen?
die Richtlinie besagt - ** async den ganzen Weg **. Aber möglicherweise ein Overkill –
Wenn Sie das nicht tun, wird Ihre Methode einfach zurückkehren und der Anrufer wird keine Ahnung haben, wenn die Arbeit erledigt ist. Entweder müssen Sie synchron auf das Ergebnis warten (was Ihnen die "Verzögerung" gibt), oder Sie müssen den gesamten Weg async haben. "One simple await" verrät, dass Sie nicht wirklich wissen, was passiert, wenn Sie asynchronen Code verwenden :) Sehen Sie sich an, wie das Gleiche gelöst wurde, bevor "warten" kam und staunen Sie, wie einfach es ist, alle Anrufer zu ändern Asynchron – Luaan
Sie haben den Hauptgrund gefunden, Async nicht zu verwenden. Verwenden Sie, wenn Sie daraus einen spürbaren Nutzen ziehen. – usr