Thread.Sleep正在终止当前任务

时间:2016-03-08 08:18:23

标签: c# multithreading task-parallel-library

我有一个程序可以创建10个并行任务,在每个任务中我需要等待90秒并且我正在使用Thread.Sleep(90000)。它运行正常,但有时它似乎终止了当前的线程。操作等待90秒没有用。

请说明问题所在。

3 个答案:

答案 0 :(得分:1)

由于您正在处理任务,我建议不要使用thread.sleep。我怀疑你正在寻找的是Task.Delay。例如

public async Task DoWork()
{
    await Task.Delay(90000);
}

这将延迟当前任务,无论执行哪个线程,都不会干扰其他任务。

答案 1 :(得分:1)

如果要阻止当前线程,请使用Thread.Sleep

如果您想要逻辑延迟而不阻止当前线程,请使用Task.Delay

例如:

async Task PutTaskDelay()
{
    await Task.Delay(90000); // 9sec
} 

效率不应成为这些方法的首要考虑因素。它们的主要实际用途是作为I / O操作的重试计时器,其大小为秒而不是毫秒。

答案 2 :(得分:0)

您必须使用 Task.Delay

  int N = 9;
  Parallel.For(0, N, async delegate(int i)
   {
                await Task.Delay(90000);
   });

编辑:

参考此question Parallel.For()异步方法无关。

var tasks = Enumerable.Range(0, 5).Select(async i =>
            {
                await Task.Delay(90);
            });
 await Task.WhenAll(tasks);