【发布时间】:2015-09-23 11:20:43
【问题描述】:
我有一个要求,我可以在一秒钟内访问一个 API 5 次。如果我必须发出总共 50 个请求,我想发出前 5 个请求并等待 1 秒,然后才能用另一批 5 个请求访问 API。我尝试使用线程池以及并行任务库 For\Foreach 循环和任务类,但我无法获得一个告诉我已创建 5 个任务的顺序计数器。 这是我正在尝试做的一个示例:
List<string> str = new List<string>();
for (int i = 0; i <= 100; i++)
{
str.Add(i.ToString());
}
Parallel.ForEach(str, new ParallelOptions { MaxDegreeOfParallelism = 5 },
(value, pls, index) =>
{
Console.WriteLine(value);// simulating method call
if (index + 1 == 5)
{
// need the main thread to sleep so next batch is
Thread.Sleep(1000);
}
});
【问题讨论】:
-
您是否考虑过使用更好的方法?也许
async/await? -
我正在使用 .net 4.0。据我所知,async/await 可从 .net 4.5 获得。如果我错了,请纠正我。
-
如果您有 VS 2012 或更高版本,您可以在 .net 4.0 中使用 async await。参考stackoverflow.com/questions/19421878/…
-
@SriramSakthivel 而不是建议可能不适用于 OP 的新工具,而是尝试使用代码解决问题。
-
@Gusdor 建议 OP 可能可能或可能不可用的工具是一个有效的建议,因为他可能根本不知道它们存在。例如,按照建议使用
async-await,将使 OP 代码更简洁,并且可能更具可扩展性,而不是使用这种线程化方法。
标签: c# multithreading parallel-processing