我读过关于基于任务的异步模式,它听起来不错。 现在,我有一个需要调用其他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