Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 休眠正在终止当前任务_C#_Multithreading_Task Parallel Library - Fatal编程技术网

C# 休眠正在终止当前任务

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); } 这将延迟当前任务,无论它在哪个线程上执行,并且不会干扰其他任务。由于您正在处理任务,我建

我有一个程序,可以创建10个并行任务,在每个任务中我需要等待90秒,我使用的是
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这是对的谢谢,我必须更新我的答案这对问题中的问题有什么帮助(“有时它似乎正在终止当前线程”)?这对问题中的问题有什么帮助(“有时它似乎正在终止当前线程”)?这对问题中的问题有何帮助(“有时它似乎正在终止当前线程”)?这对问题中的问题有何帮助(“有时它似乎正在终止当前线程”)?