如何使并行独立任务在C#中调用WCF

时间:2016-05-27 08:52:48

标签: c# multithreading wcf task-parallel-library task

我正在使用任务工厂调用服务方法

让我们考虑一下客户代码:

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?

1 个答案:

答案 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;

当您需要相应的结果时。