Auf der Suche nach dem Verständnis von Async/Await entsteht das Dilemma: Ist es notwendig, eine Methode darin zu kapseln? Task.Run, um sowohl asynchrones Verhalten als auch Hintergrund-Thread-Ausführung zu erreichen?
„Async“ bezeichnet eine Methode, die die Kontrolle an den aufrufenden Thread übergeben kann, bevor mit der Ausführung begonnen wird. Diese Nachgabe erfolgt durch Wait-Ausdrücke. Im Gegensatz dazu bezieht sich „asynchron“ im Sinne von MSDN (ein oft irreführender Begriff) auf Code, der in einem separaten Thread ausgeführt wird.
Getrennt davon beschreibt „awaitable“ einen Typ, der mit dem Wait-Operator verwendet werden kann. Zu den häufig erwarteten Objekten gehören Task und Task
Um eine Methode in einem Hintergrundthread auszuführen und dabei die Erwartbarkeit beizubehalten, verwenden Sie Task.Run:
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
Von diesem Ansatz wird jedoch im Allgemeinen abgeraten.
Um eine asynchrone Methode zu erstellen, die anhalten und die Kontrolle abgeben kann, deklarieren Sie die Methode als asynchron und verwenden Sie „await“ an bestimmten Yield-Punkten:
private async Task<int> GetWebPageHtmlSizeAsync() { var html = await client.GetAsync("http://www.example.com/"); return html.Length; }
Async-Code basiert in seinen Wait-Ausdrücken auf Awaitables. Awaitables können entweder andere asynchrone Methoden oder synchrone Methoden sein, die Waitables zurückgeben.
Vermeiden Sie das willkürliche Einschließen synchroner Methoden in Task.Run. Behalten Sie stattdessen synchrone Signaturen bei und überlassen Sie die Option des Wrappings dem Verbraucher.
Das obige ist der detaillierte Inhalt vonAsync/Await: Sollte ich meine Methode für Hintergrund-Threading in „Task.Run' einschließen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!