2016-07-30 20 views
-1

Ich habe eine schwere Zeit zu verstehen async/erwarten. Sagen wir, ich habe eine Klasse A und Klasse B. Klasse A gibt ein ActionResult von der Methode wcf service zurück. Zuvor ruft es eine asynchrone Methode aus einer anderen Klasse mit Hilfe von "abwarten" auf. Bedeutet das, dass obj.method(param1) asynchron abläuft und ohne auf den Abschluss der Ausführung zu warten, wird die Methode wcfservice ausgeführt? oder wartet es bis es fertig ist?Asynchrone Programmierung mit async/erwarten

Ich wollte, dass SomeMethod() seine Ausführung fortsetzen sollte, ohne auf das Ergebnis der Methode in Klasse B zu warten. Wie werde ich das erreichen können?

public async classA 
{ 
    public async IHttpActionResult somemethod 
    { 
     classB obj = new classB(); 
     await obj.method(param1); 
     returnok(somewcfservice.method()); 
    } 

public classB 
{ 
    public async Task method(param) 
    { 
     obj.somebuiltinmethod(param) 
    } 
} 
+1

Der Code, den Sie geschrieben nicht gültig ist. 'somemethod()' kann nicht 'erwarten' verwenden, ohne selbst 'asynchron' zu sein. Die Frage ist auch sehr breit. Stack Overflow ist keine Tutorial-Site. Sie sollten Sprachfunktionen untersuchen. Wenn Sie noch Fragen haben, seien Sie _speziell_ und erklären Sie, welche Forschung Sie bereits durchgeführt haben. Wenn Sie möchten, dass 'somethod()' normal ohne Warten abgeschlossen wird, dann warten Sie nicht (d. H. Verwenden Sie nicht 'wait'). –

Antwort

-1

1. Bedeutet dies, dass (param1) laufen wird aysnchronously und ohne Warten auf den Abschluss seiner Ausführung, wcfservice Methode obj.method await ausgeführt wird? oder wartet es bis es fertig ist?

erwarten obj.method (param1); wartet, bis obj.method die Ausführung beendet, bevor der Ausführungsablauf fortgesetzt wird. Thi bedeutet die obj.method (param1); beendet und dann wird die Web-Service-Methode aufgerufen.

2. Ich wollte, dass somemethod() seine Ausführung fortsetzen sollte, ohne auf das Ergebnis der Methode in Klasse B zu warten. Wie werde ich das erreichen können?

können Sie etwas tun:

var task = obj.method(param1); 
var result = somewcfservice.method() 
Task.WaitAll(task); 
returnok(result); 
+0

_ "erwarten obj.method (param1); wird warten, bis die obj.method beendet" _ - nein, wird es nicht. Es wird einfach nicht kompilieren, weil 'somethod()' keine 'async' Methode ist. "Du kannst so etwas tun:" - Nein, das ist das Gegenteil von dem, wonach er zu fragen scheint. Ihr Beispiel blockiert den Thread, bis die Aufgabe abgeschlossen ist. Er wird speziell nach der 'somethod()' Methode gefragt, um die Ausführung fortzusetzen (und vermutlich zurückzukehren) _ "** ohne zu warten **" _ (seine Wörter). –

+0

@PeterDuniho Ich stimme zu, dass der Code nicht kompiliert, aber ich denke, dass er bald erkennen wird. Nun, nur eine Aufgabe zu erstellen und nicht darauf warten, ausgeführt zu werden, übersteigt meine Vorstellungskraft! –