我是并行编程的新手,但我搜索了很多博客和其他网站(包括SO)以实现以下目标:我需要调用外部网络服务(我不会这样做)有多次代码访问权限。每个调用大约需要10秒钟来处理,所以我决定使用Parallel来获得性能。
public BlockingCollection<TransacaoResponse> ExecutarAsync(TransacaoRequest request)
{
BlockingCollection<TransacaoResponse> listResponse = new BlockingCollection<TransacaoResponse>();
Parallel.ForEach<Item>(request.Itens, new ParallelOptions() { MaxDegreeOfParallelism = 10 }, (c) =>
{
TransacaoResponse responseInner = new TransacaoResponse();
int result = _operadora.EnviarTransacao(request.Codigo);
responseInner.Status = result;
listResponse.Add(responseInner);
});
return listResponse;
}
即使使用Parallel.ForEach和BlockingCollection,也需要50秒才能返回结果(我测试过这个方法5次),与标准Foreach相比。我错过了什么?这段代码中是否存在瓶颈?感谢。