我在使用异步/等待时遇到了一些麻烦。我与具有以下代码(简化为简洁起见)现有的代码库帮助:如何将此Parallel.ForEach代码转换为异步/等待
List<BuyerContext> buyerContexts = GetBuyers();
var results = new List<Result>();
Parallel.ForEach(buyerContexts, buyerContext =>
{
//The following call creates a connection to a remote web server that
//can take up to 15 seconds to respond
var result = Bid(buyerContext);
if (result != null)
results.Add(result);
}
foreach (var result in results)
{
// do some work here that is predicated on the
// Parallel.ForEach having completed all of its calls
}
我怎么能这个代码转换为异步代码,而不是并行使用异步/等待?我受到一些非常严重的性能问题的困扰,我认为这是使用并行方法处理多个网络I/O操作的结果。
我已经尝试了几种方法,但我从Visual Studio获得警告,我的代码将同步执行,或者我无法使用await关键字以外的异步方法,所以我确信我只是缺少简单一些。
编辑#1:我打开替代异步/等待以及。根据我的阅读,这似乎是正确的方法。
编辑#2:此应用程序是一个Windows服务。它呼吁几个“买家”要求他们竞标一个特定的数据。在处理可以继续之前,我需要全部出价。
您可以添加出价方法定义吗?如果它是网络相关的,它将真正有助于查看网络代码:) –
听起来像是一个非常昂贵的呼叫在一个循环。你需要预先得到所有的结果吗?您是否可以得到一些结果,并且只有在用户要求更多时才返回更多? –
一个简单的解决方案见http://stackoverflow.com/questions/9290498/how-can-i-limit-parallel-foreach。 – beerboy