Validieren Sie Parameter in der asynchronen Methode

8

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

%Vor%

Wie sollte die gleiche Überprüfung in der asynchronen Methode aussehen?

1) Wie bei der Synchronisierungsmethode

2) (Aktualisiert nach der ersten Antwort)

%Vor%     
Demarsch 06.09.2013, 11:09
quelle

2 Antworten

6

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:

%Vor%

weil das Task niemals gestartet wurde - und niemals sein wird. Ich verdächtige Sie müssten etwas tun wie:

%Vor%

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.

    
Marc Gravell 06.09.2013, 11:22
quelle
3

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.

    
Gerrie Schenck 06.09.2013 11:23
quelle

Tags und Links