Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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_Threadpool - Fatal编程技术网

C# 线程的替代品。睡那个块

C# 线程的替代品。睡那个块,c#,multithreading,threadpool,C#,Multithreading,Threadpool,我正在寻找一种替代调用Thread.Sleep的方法,它不会阻止线程,而是将线程返回到线程池中。这样的东西存在吗?使用 使用 如果线程返回到池中,那么它就不会在所讨论的方法中做更多的工作。将该方法的下一位设置为一个单独的方法,并创建一个调用它的计时器。如果线程返回池,那么它将不会在所讨论的方法中执行更多的工作。将该方法的下一位设为单独的方法,并创建一个调用该方法的计时器。您也可以使用计时器,例如: using System.Timers; private void Main() { T

我正在寻找一种替代调用Thread.Sleep的方法,它不会阻止线程,而是将线程返回到线程池中。这样的东西存在吗?

使用

使用


如果线程返回到池中,那么它就不会在所讨论的方法中做更多的工作。将该方法的下一位设置为一个单独的方法,并创建一个调用它的计时器。

如果线程返回池,那么它将不会在所讨论的方法中执行更多的工作。将该方法的下一位设为单独的方法,并创建一个调用该方法的计时器。

您也可以使用计时器,例如:

using System.Timers;

private void Main()
{
    Timer t = new Timer();
    t.Interval = 5000; // 5 seconds
    t.AutoReset = false;
    t.Elapsed += new SleepDone(TimerElapsed);
    t.Start();
}

private void SleepDone(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("HERE WHAT COME AFTER SLEEP");
}

您还可以使用计时器,例如:

using System.Timers;

private void Main()
{
    Timer t = new Timer();
    t.Interval = 5000; // 5 seconds
    t.AutoReset = false;
    t.Elapsed += new SleepDone(TimerElapsed);
    t.Start();
}

private void SleepDone(object sender, ElapsedEventArgs e)
{
    Console.WriteLine("HERE WHAT COME AFTER SLEEP");
}

任务。延迟
。看到斯里拉姆的答案后,我感觉自己就像一只老狗,忘记了新把戏。或者
任务。延迟
。在看到Sriram的答案后,我觉得自己像一只老狗,现在忘记了新的把戏。我把它放进去,并制作了一个方法,在这个方法中,这行代码看起来是异步的。我在调用方法中做了什么吗?什么都不做,这就是调用方法和“异步等待”的原因,如果需要调用方法也需要等待,那么在那里使用wait…@SachinKainth注意,任何非
async
代码都将在主线程上继续运行;基本上,您需要将所有受影响的代码转换为
async
/
wait
,以便在不更改执行顺序的情况下执行。例如,如果您的代码调用
SomeMethodAsync()
,但没有
等待
结果,则该方法调用后的代码可能会执行,即使
SomeMethodAsync()
刚刚启动,我将其放入并使该行显示为异步的方法。我在调用方法中做了什么吗?什么都不做,这就是调用方法和“异步等待”的原因,如果需要调用方法也需要等待,那么在那里使用wait…@SachinKainth注意,任何非
async
代码都将在主线程上继续运行;基本上,您需要将所有受影响的代码转换为
async
/
wait
,以便在不更改执行顺序的情况下执行。例如,如果您的代码调用了
SomeMethodAsync()
,但没有等待结果,那么即使
SomeMethodAsync()
刚刚启动,该方法调用后的代码也可能会被执行为什么
AutoReset=true
?感谢@SriramSakthivel+1提供的好提示。他需要运行一次延迟。为什么
AutoReset=true
?感谢@SriramSakthivel+1提供的好提示。他需要运行一次延迟。