【发布时间】:2013-01-16 20:35:01
【问题描述】:
我现在需要决定如何构建我的异步代码。 我需要从我的函数 Func1() 一次调用 20 个不同的 Web 服务,当它们都返回一个 xml 答案时,将所有结果加入一个大 xml。
我考虑过使用 TPL 任务。像这样:
var task = Task.Factory.StartNew (call the web service1...);
var task2 = Task.Factory.StartNew (call the web service2...);
var task3 = Task.Factory.StartNew (call the web service3...);
task.WaitAll();
听起来不错还是有更好的方法来完成工作?
【问题讨论】:
-
是的,有一种更好的方法 - 使调用异步 - 现在你并行执行它们,但在等待结果时阻塞多达 3(或 20 个?)线程 - 如果你进行异步调用不会阻止任何
-
我不会说
async一定更好,而是不同,它的优越性取决于具体情况。在这种情况下,“调用 Web 服务”可能是一个相当轻量级的操作,因此线程 (Task.Factory.StartNew) 的开销可能是不合理的。 -
根据问题,xml 的组合应该作为输出,所以调用必须等到每个请求都应该完成。在最大情况下,所有进程都可以推送到后台线程。因为它已经是平行的,所以这部分没有什么可做的。我不认为完整的 asyc 会在这里工作。
标签: c# c#-4.0 task-parallel-library