我有一个程序可以创建10个并行任务,在每个任务中我需要等待90秒并且我正在使用Thread.Sleep(90000)
。它运行正常,但有时它似乎终止了当前的线程。操作等待90秒没有用。
请说明问题所在。
答案 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);