2013-03-08 101 views
1

我正在尋找使用asyncawait關鍵字在調用服務,但想知道是否需要await關鍵字?使用異步呼叫服務等待

修改示例如果找到;我想這樣做的是建立一個async調用到與任務都會獲得一個服務,但不需要等待迴應:

async Task CallService(InformationForService informationForService) 
{ 
    var service = SetupService(); 

    // Does this need the await keyword? 
    service.Doof(informationForService); 

} 
+0

什麼返回任務''? – 2013-03-08 10:18:52

+0

您的代碼如何編譯? – 2013-03-08 10:22:25

+0

對不起,從一個例子複製,我忘了我離開那個回報。 – 2013-03-08 10:27:50

回答

1

如果你宣佈你的功能異步並且它返回任務然後你的代碼中的東西需要返回該類型。我沒有看到代碼中的任何內容,因爲您沒有使用await關鍵字,而這些關鍵字在呼叫發送到服務時通常會從您的功能中產生,然後在對服務的呼叫作出響應時從以下行繼續。

如果你不在乎什麼服務的回報,忽略它,但使用等待關鍵字,因爲這將允許在服務調用完成你的代碼,以得到與其他工作。

async Task<int> CallService(InformationForService informationForService) 
{ 
    var service = SetupService(); 

    // Does this need the await keyword? 
    await service.Doof(informationForService); 

} 

而且,請注意,如果你使用WCF調用一個服務,你可以發出一個單向通話一次消息的最後一個字節發送的完成。 Juval Lowy discusses one-way calls in this paper

+0

對,所以如果返回如果無效,那麼我仍然說'await service.Doof(x)' – 2013-03-08 10:29:22

+0

@LukeDuddridge該方法需要返回一個Task來等待。 – Default 2013-03-08 10:30:06

+0

@默認好吧,它不能無效。它可以只是「任務」還是需要返回類型? – 2013-03-08 10:31:06

1

方法不必爲async爲可等待。有許多方法返回Task,並且可以使用await,即使它們不是async

我假設你的服務是一個WCF服務。在這種情況下,如果您(重新)使用VS2012生成代理,則對於您的服務you'll get a DoofAsync method that will work with await上的每種方法Doof

CallService方法並不需要是async;你可以回到你從DoofAsync得到Task

Task CallService(InformationForService informationForService) 
{ 
    var service = SetupService(); 
    return service.DoofAsync(informationForService); 
} 
+0

我們正在使用vs2010 – 2013-03-08 13:58:00

+1

@LukeDuddridge你的問題表明你正在尋找'async''''await',所以這就是Stephen的答案。而且你不能合理地使用VS 2010的'async'''await'。 – svick 2013-03-08 14:02:42

+0

@LukeDuddridge:我建議你升級。我不知道VS2010-> VS2012有任何直播問題;實際上這是最平穩的過渡之一。 – 2013-03-08 14:08:35