【发布时间】:2012-10-15 00:58:06
【问题描述】:
我有一个类似的功能
private void DoSomethingToFeed(IFeed feed)
{
feed.SendData(); // Send data to remote server
Thread.Sleep(1000 * 60 * 5); // Sleep 5 minutes
feed.GetResults(); // Get data from remote server after it's processed it
}
我想并行化这个,因为我有很多相互独立的提要。基于this answer,将Thread.Sleep() 留在其中并不是一个好主意。我还想在所有线程都启动后等待,直到它们都有机会获得结果。
处理这种情况的最佳方法是什么?
编辑,因为我不小心把它漏掉了:我本来考虑把这个函数称为Parallel.ForEach(feeds, DoSomethingToFeed),但是当我找到答案时我想知道是否有更好的方法来处理睡眠我链接到了。
【问题讨论】:
-
不要并行化睡眠调用。使用计时器。
-
@HansPassant - 这正是我想弄清楚如何避免的。
-
@Bobson 为什么要避免这种情况?
-
你能用 C# 5 吗?您链接到的问题专门讨论了
Parallel.For(),使用Thread.Sleep()在您的情况下可能就足够了,具体取决于您使用它的方式和您的其他要求。 -
@svick - 我指的是避免并行睡眠调用。唔。我想我已经提到当我找到那个线程时我已经在看
Parallel.ForEach(),但我在那里看不到它。一定从来没有从我的头到键盘。不幸的是,C# 5 不是一个选项。
标签: c# multithreading parallel-processing task-parallel-library