我有一个复杂的foreach循环。由于网络服务器投了529,我必须对每100个连接进行限制,而且我知道在并行中我的限制将会搞砸。
有没有办法让这个并行运行,并且仍然可以正常运行?我刚刚开始涉足并行编程,并且我认为我不知道如何解决这个问题。
foreach (var userId in IdCollection)
{
i++;
if (i % 100 == 0 && i != 0)
{
Thread.Sleep(15 * 1000);
}
ProcessId(userId, file);
}
的ProcessID:
static async void ProcessId(long userId, string file)
{
var username = await Utilities.GetUsernameFromId(userId);
FileUtilities.WriteUsernameToFile(username, file);
IdItemsProcessed++;
}
方法GetUsernameFromId是实际挂起的那个,我并行运行的理由是希望加快速度,我有超过100万个ID来处理,按照这个速度,它会带我永远
它将Web客户端运行到服务器,获取响应并将其解析为用户名。非常简单的东西,但是如果你大量地做这件事就会成为一个问题。