我讀過關於基於任務的異步模式,它聽起來不錯。 現在,我有一個需要調用其他WCF服務的WCF服務。這些服務返回不同的結果。 如何使用新模式異步調用這些服務,並等待所有完成?WCF服務調用異步其他WCF服務
2
A
回答
3
編輯:如果你拿到的BeginXXX和EndXXX方法,請參閱this question是如何將這些進入Task<T>
任務 - 和然後我的答案的其餘部分將被適用。
基本上,您需要TaskFactory<T>.FromAsync(...)
。
您可以使用TaskEx.WhenAll
,最終將Task.WhenAll
。
請注意,這將等待所有任務完成,即使早期出現錯誤。
由於任務有不同的結果類型,則需要將其設置爲開始,等待他們全部完成,然後獲取結果:
var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();
await TaskEx.WhenAll(t1, t2, t3);
var result1 = t1.Result;
var result2 = t2.Result;
var result3 = t3.Result;
// Use the results
另外,剛剛火過的任務首先,分別等待每一個。請注意,TAP中的任務是「熱門」 - 它們會在您創建它們時立即開始,而不是在您等待它們時開始。因此,這也可以工作 - 但這個時候如果t1
拋出一個異常,它不會等待t2
和t3
完成:
var t1 = service1.DoFirstTaskAsync();
var t2 = service2.DoSecondTaskAsync();
var t3 = service3.DoThirdTaskAsync();
var result1 = await t1;
var result2 = await t2;
var result3 = await t3;
// Use the results
我博客中提到這一點,首先是關於waiting for multiple tasks in general然後約exceptions when waiting for multiple tasks 。
1
如果你想了解WCF隊的計劃,以支持異步/ AWAIT模型,看看下面的博客文章:
阿馬德奧
0
見Async CTP - How can I use async/await to call a wcf service?
有關異步客戶端和服務的示例,請參見 。 或者使用AsyncWcfLib,它支持Actor based programming model,並且具有在應用程序內或通過網絡調用其他服務的服務示例。
相關問題
- 1. VS2010:調試WCF服務異步調用
- 2. 從wcf服務調用異步方法
- 3. ASP.NET MVC異步調用WCF服務
- 4. 異步調用WCF回服務開發
- 5. 異步WCF服務超時
- 6. WCF服務 - 異步如何?
- 7. 返回其他服務的WCF服務
- 8. WCF:服務調用服務
- 9. 在windows服務中託管的WCF服務的異步調用
- 10. 來自Windows服務的異步WCF服務調用
- 11. 從WCF服務調用WCF服務時獲取異常
- 12. WCF Web服務正在觀看其他WCF Web服務
- 13. WCF服務方法同步/異步
- 14. 調用WCF服務
- 15. 調用WCF服務
- 16. 在內部有多個異步調用的異步WCF服務
- 17. 在異步WCF服務中使用CCR
- 18. WCF服務異常
- 19. 調用WCF服務調用另一個WCF服務的問題
- 20. WCF/WCF數據服務/ WCF RIA服務
- 21. WCF服務調用域服務 - 域服務讀取WCF服務的web.config
- 22. Azure WCF服務使用Azure WCF服務
- 23. WPF/WCF異步服務調用和同步上下文
- 24. 從WCF服務調用asmx Web服務
- 25. 調用WCF服務 - 服務實例
- 26. UWP Wcf如果調用兩次服務調用異步失敗
- 27. WCF異步服務器端處理
- 28. WCF服務器 - 異步方法
- 29. 異步客戶端服務器WCF
- 30. 如何創建異步WCF服務
感謝您的回答, 但我還沒有理解一切。 我認爲service1,service2和service3是服務的代理客戶端。 DoFirstTaskAsync,DoSecondTaskAsync和DoThirdTaskAsync是這些服務上的方法。 但方法不返回任務或任務,他們返回的IList ,也爲方法簽名的IAsyncResult BeginSomthing和IList的 EndSomthing(實現異步模式) 我在哪裏錯了? –
Mirko
2010-11-04 11:02:37
@Mirko:將編輯。 – 2010-11-04 11:18:53