【问题标题】:How to make Parallel Independent Task to Call WCF in C#如何使并行独立任务在 C# 中调用 WCF
【发布时间】:2016-09-25 12:46:49
【问题描述】:

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

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

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 ?

【问题讨论】:

  • 这是 wcf 服务吗?
  • 是的。它是 WCF 服务。

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


【解决方案1】:

对于 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;

当您需要相应的结果时。

【讨论】:

    猜你喜欢
    • 2011-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2020-02-13
    • 1970-01-01
    • 2016-09-20
    相关资源
    最近更新 更多