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

Posted

技术标签:

【中文标题】如何使并行独立任务在 C# 中调用 WCF【英文标题】:How to make Parallel Independent Task to Call WCF in C# 【发布时间】: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 服务。 【参考方案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;

当您需要相应的结果时。

【讨论】:

以上是关于如何使并行独立任务在 C# 中调用 WCF的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 并行任务中为多个服务调用创建并行任务

如何在基于 C# 的 Windows 服务中处理以不同时间间隔并行运行的多个任务?

从 C# 调用 WCF 时如何增加 MaxReceivedMessageSize [重复]

如何在 2 个独立的 C# 程序之间进行事件驱动编程?

确保并行调用不使用太多 CPU

如何通过 Jquery 调用 C# WCF 服务来修复“ERR_ABORTED 400 (Bad Request)”错误?