Ich schreibe eine Klasse, die synchrone und asynchrone Versionen der gleichen Methode hat
void MyMethod(object argument)
und Task MyMethodAsync(object argument)
. In der Synchronisierungsversion validiere ich Argument mit der einfachen Prüfung
Wie sollte die gleiche Überprüfung in der asynchronen Methode aussehen?
1) Wie bei der Synchronisierungsmethode
2) (Aktualisiert nach der ersten Antwort)
%Vor%Das hängt ein bisschen davon ab, wann der Fehler ausgelöst werden soll - d. h. eifrig oder als Teil des Erwarteten. Wie bei Iteratorblöcken benötigen Sie zwei Methoden, um nach Fehlern zu suchen:
%Vor%Dies führt dann jedes Argument durch, das als Teil des ersten Aufrufs prüft , nicht das Erwartete. Wenn Sie möchten, dass die Ausnahme Teil des Erwarteten ist, können Sie sie einfach werfen:
%Vor% In Ihrem Beispiel zeigt die Tatsache, dass Sie return
in Task
sind, jedoch an, dass dies keine async
Methode ist, sondern eine async (aber nicht async
) Methode. Du kannst nicht einfach tun:
weil das Task
niemals gestartet wurde - und niemals sein wird. Ich verdächtige Sie müssten etwas tun wie:
was ist ... ein bisschen wie ein Mundvoll und könnte wahrscheinlich ein bisschen besser gekapselt werden. Dies wird ein Task
zurückgeben, das angibt, dass es sich im Status Faulted
befindet.
Sie werfen es einfach wie in der sync-Methode, die TPL verfügt über verschiedene Mechanismen zum erneuten Auslösen einer Ausnahme, zum Beispiel beim Lesen der. Result
-Eigenschaft oder der access. Exception
-Eigenschaft.
Tags und Links c# asynchronous