C# 休眠正在终止当前任务
我有一个程序,可以创建10个并行任务,在每个任务中我需要等待90秒,我使用的是C# 休眠正在终止当前任务,c#,multithreading,task-parallel-library,C#,Multithreading,Task Parallel Library,我有一个程序,可以创建10个并行任务,在每个任务中我需要等待90秒,我使用的是Thread.Sleep(90000)。它工作正常,但有时似乎正在终止当前线程。正在等待90秒的操作不起作用 请说明问题所在。既然您正在处理任务,我建议您不要使用thread.sleep。我猜你要找的是。比如说 public async Task DoWork() { await Task.Delay(90000); } 这将延迟当前任务,无论它在哪个线程上执行,并且不会干扰其他任务。由于您正在处理任务,我建
Thread.Sleep(90000)
。它工作正常,但有时似乎正在终止当前线程。正在等待90秒的操作不起作用
请说明问题所在。既然您正在处理任务,我建议您不要使用thread.sleep。我猜你要找的是。比如说
public async Task DoWork()
{
await Task.Delay(90000);
}
这将延迟当前任务,无论它在哪个线程上执行,并且不会干扰其他任务。由于您正在处理任务,我建议您不要使用thread.sleep。我猜你要找的是。比如说
public async Task DoWork()
{
await Task.Delay(90000);
}
这将延迟当前任务,无论它在哪个线程上执行,并且不会干扰其他任务。如果要阻止当前线程,请使用
thread.Sleep
如果需要逻辑延迟而不阻塞当前线程,请使用Task.Delay
例如:
async Task PutTaskDelay()
{
await Task.Delay(90000); // 9sec
}
效率不应该是这些方法的首要问题。它们在现实世界中的主要用途是作为I/O操作的重试计时器,以秒为单位,而不是以毫秒为单位。当您要阻止当前线程时,请使用
Thread.Sleep
如果需要逻辑延迟而不阻塞当前线程,请使用Task.Delay
例如:
async Task PutTaskDelay()
{
await Task.Delay(90000); // 9sec
}
效率不应该是这些方法的首要问题。它们在现实世界中的主要用途是作为I/O操作的重试计时器,以秒为单位,而不是以毫秒为单位。您必须使用
int N = 9;
Parallel.For(0, N, async delegate(int i)
{
await Task.Delay(90000);
});
编辑:
引用此Parallel.For()与async方法不兼容
var tasks = Enumerable.Range(0, 5).Select(async i =>
{
await Task.Delay(90);
});
await Task.WhenAll(tasks);
您必须使用
int N = 9;
Parallel.For(0, N, async delegate(int i)
{
await Task.Delay(90000);
});
编辑:
引用此Parallel.For()与async方法不兼容
var tasks = Enumerable.Range(0, 5).Select(async i =>
{
await Task.Delay(90);
});
await Task.WhenAll(tasks);
您可以使用
wait Task.Delay(90)
来等待您希望延迟的每个任务!它将暂停当前任务还是我的全部10项任务?否,它将等待自行运行此代码的任务等待所有提供的任务对象完成执行。您可以使用wait task.Delay(90)
等待您希望延迟的每个任务!它将暂停当前任务还是我的所有10个任务?否,它将等待自行运行此代码的任务等待所有提供的任务对象完成执行。切勿组合并行。for
和异步
-等待
。它不会像你想的那样。举个例子:你的代码会立即返回,而不是在90秒后。是的@svick没错谢谢,我必须更新我的答案永远不要将并行组合。对于和异步-等待。它不会像你想的那样。举个例子:你的代码会立即返回,而不是在90秒后返回。是的@svick这是对的谢谢,我必须更新我的答案这对问题中的问题有什么帮助(“有时它似乎正在终止当前线程”)?这对问题中的问题有什么帮助(“有时它似乎正在终止当前线程”)?这对问题中的问题有何帮助(“有时它似乎正在终止当前线程”)?这对问题中的问题有何帮助(“有时它似乎正在终止当前线程”)?