![](/img/trans.png)
[英]UWP: how to optimize synchronization between WCF WebServices and SQLite through async calls
[英]Async calls of several WCF WebServices
我有一个控制台应用程序,该应用程序运行以特定顺序调用4 WCF Web服务的循环。
循环的每个迭代都不依赖于上一个或下一个迭代。
循环的每次迭代大约需要5秒钟。
我想使用一些并行或异步工作来减少时间。
基本上,我在想的是,当我在等待其中一项服务时,我可能会得到另一个迭代,从而调用其他四项服务之一。
但是,在我的尝试中,这没有用。
我试图做这样的事情:
dataRows.ToList().ForEach(async patientRow =>
{
// Calls made here. Example calls below:
var personData = await personOperations.SavePersonAsync(personRow);
var saveResponse = await orderingBrokerOperations
.SaveAsync(orderedTestContracts, personData);
printOperations.Print(saveResponse );
});
但这最终会提前加载大量电话。 (这意味着第一个Web服务被爆裂了许多请求。)最终,其中一个呼叫超时,因为它收到了太多的请求。
所以我尝试了这个:
Parallel.ForEach(dataRows,
new ParallelOptions{MaxDegreeOfParallelism = 10}, (patientRow) =>
{
// WCF calls are made synchronously
});
这避免了我的电话打扰别人,但并没有真正提高速度。
我也尝试这样做
Parallel.ForEach(dataRows,
new ParallelOptions{MaxDegreeOfParallelism = 10}, async (patientRow) =>
{
// Do the calls here. Each call is made using the await keyword.
});
但是它和第一种选择有同样的问题。
出于无奈,我尝试了以下方法:
long inProgress = 0;
dataRows.ToList().ForEach(async patientRow =>
{
inProgress++;
if (inProgress > 10)
Thread.Sleep();
// Do the calls here. Each call is made using the await keyword.
inProgress--;
});
这也没有真正加快速度。
我的开发服务器不是很强大,但是它们应该足够强大,可以同时处理至少10个呼叫。 我不确定发生了什么。
有没有一种好方法可以将对我的服务的调用分散而不同步运行?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.