我想从各种服务中获取信息。我怎样才能实现所有服务调用可以同时执行使用C#任务,而不是通过线程。
我尝试过的C#代码:
void GetServiceList() {
Task.Factory.StartNew(() => {
var List1 = client1.GetList1();
var List2 = client2.GetList2();
var List3 = client3.GetList3();
var List4 = client4.GetList4();
var List5 = client5.GetList5();
var List6 = client6.GetList6();
var List7 = client7.GetList7();
var List8 = client8.GetList8();
var List9 = client9.GetList9();
var List10 = client10.GetList10();
});
}
在上面的代码中,创建了任务,但是服务调用是按顺序发生的。我希望将它作为平行。
答案 0 :(得分:0)
您在这里做的是创建一个匿名方法,依次调用每个服务,然后在并行任务中执行该方法。你需要的是一个任务数组。
List<Task> taskList = new List<Task>();
Task task1=
Task.Factory.StartNew(() =>
var List1 = client1.GetList1(););
Task task2=
Task.Factory.StartNew(() =>
var List2 = client1.GetList2(););
// and so forth
taskList.Add(task1);
taskList.Add(task2);
Task.WaitAll(taskList.ToArray());
答案 1 :(得分:0)
如果你对你正在呼叫的服务有任何控制权,我建议你调用异步,这样你就可以等待任务而不是使用Task.Factory.StartNew()
答案 2 :(得分:0)
您甚至无需控制服务,因为它本身就是异步,您可以利用这一点。这两个将愉快地相互通信,并为您提供同步服务器和异步客户端:
服务器端定义:
[ServiceContract]
public interface IService
{
[OperationContract]
IResult DoStuff(IParameter parameter);
}
客户端定义:
[ServiceContract]
public interface IService
{
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginProcess(IParameter parameter, AsyncCallback callback, object asyncState);
IResult EndProcess(IAsyncResult result);
}