如何使并行独立任务在 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# 的 Windows 服务中处理以不同时间间隔并行运行的多个任务?
从 C# 调用 WCF 时如何增加 MaxReceivedMessageSize [重复]
如何通过 Jquery 调用 C# WCF 服务来修复“ERR_ABORTED 400 (Bad Request)”错误?