当我需要从服务中提取数据时,我遇到了一个挑战。我正在使用以下对Parallel.ForEach
的调用:
Parallel.ForEach(idList, id => GetDetails(id));
GetDetails(id)
调用大约半秒钟的Web服务,并将生成的详细信息添加到列表中。
static void GetDetails(string id)
{
var details = WebService.GetDetails(Key, Secret, id);
AllDetails.Add(id, details);
}
问题是,我知道该服务可以处理更多的呼叫,但我似乎无法弄清楚如何让我的进程增加更多的呼叫,除非我拆分我的列表并打开这个过程多次。换句话说,如果我打开此应用GetDetails.exe
4次并将ID数分成每个,我将运行时间减少到原来的25%。这告诉我可能性存在,但我不确定如何在不多次增加控制台应用程序的情况下实现它。
希望对于更熟悉并行性的人来说这是一个非常简单的问题,但在我的研究中,我还没有运行多个实例来解决它。
答案 0 :(得分:1)
一些可能性:
WebService.GetDetails(...)
有可能使用某种机制来确保一次只发生一次网络请求。WebService.GetDetails(...)
重复使用某种标识符(例如会话密钥),服务器可能会限制它为该一个会话接受的并发请求数。Dictionary<>
这样的结构会导致零星的,难以追踪的错误。使用async
请求而不是并行线程可能会更好。如果您对await
小心,可以同时激活多个请求,同时仍然只使用一个线程。