2016-07-30 246 views
-1

我很難理解異步/等待。比方說,我有一個類A和類B.類A從wcf服務方法返回一個ActionResult。在此之前,它使用await從另一個類中調用異步方法。這是否意味着等待obj.method(param1)將異步運行,而不等待其執行完成,wcfservice方法將執行?還是等到它完成?異步編程使用異步/等待

我希望somemethod()應​​該繼續執行,而不必等待classB中方法的結果。我將如何能夠實現這一目標?

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

您發佈的代碼是無效的。 'somemethod()'不能使用'await'而不是'async'。這個問題也非常廣泛。堆棧溢出不是教程網站。你應該研究語言功能。如果您仍然有疑問,請特別注意並確保解釋您已完成的研究。如果你想'somemethod()'在不等待的情況下正常完成,那麼不要等待(即不要使用'await')。 –

回答

-1

1.這是否意味着等待着obj.method(參數1)將aysnchronously運行,而無需等待其執行完畢,wcfservice方法將執行?還是等到它完成?

await obj.method(param1);將等到obj.method在恢復執行流程之前完成執行。這意味着obj.method(param1);完成,然後將調用Web服務方法。

2.我希望somemethod()應​​該繼續執行,而不必等待classB中方法的結果。我將如何能夠實現這一目標?

你可以做這樣的事情:

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

_「await obj.method(param1);將等到obj.method完成」_ - 不,它不會。它只是無法編譯,因爲somemethod()不是'async'方法。 _「你可以做這樣的事情:」_ - 不,這與他似乎要求的相反。您的示例將阻止該線程,直到任務完成。他特別要求'somemethod()'方法繼續執行(並且可能返回)_「**不等待**」(他的話)。 –

+0

@PeterDuniho我同意代碼不能編譯,但我認爲他很快就會實現。那麼只是創建一項任務而不是等待被運行是超出我的想象! –