我正在使用任务工厂调用服务方法
让我们考虑一下客户代码:
List<Task> taskList = new List<Task>();
Task task1=
Task.Factory.StartNew(() =>
var List1 = client1.GetList1(););
Task task2=
Task.Factory.StartNew(() =>
var List2 = client1.GetList2(););
Task task3=
Task.Factory.StartNew(() =>
var List3 = client1.GetList3(););
// and so forth
taskList.Add(task1);
taskList.Add(task2);
taskList.Add(task3);
Task.WaitAll(taskList.ToArray());
现在服务如何收到请求?它是并行还是串行接收?如果它是Serial意味着我怎么能把它作为Parallel?
答案 0 :(得分:0)
对于wcf服务,您可以完全跳过客户端任务生成。
如果服务器端实现IServer
而客户端使用IAsyncServer
,则这两个完美地协同工作:
[ServiceContract]
public interface IServer
{
[OperationContract]
int DoStuff1();
[OperationContract]
int DoStuff2();
}
[ServiceContract(Name = nameof(IServer))]
public interface IAsyncServer
{
[OperationContract]
Task<int> DoStuff1();
[OperationContract]
Task<int> DoStuff2();
}
客户正在做
var task1 = server.DoStuff1();
var task2 = server.DoStuff2();
将一个接一个地触发两个动作,但第二个动作可以在第一个动作完成之前启动。要获得结果,请执行类似
的操作var result1 = await task1;
var result2 = await task2;
当您需要相应的结果时。