Multithreading 我们应该用Task.Delay来代替Thread.Sleep吗

Multithreading 我们应该用Task.Delay来代替Thread.Sleep吗,multithreading,task-parallel-library,c#-5.0,Multithreading,Task Parallel Library,C# 5.0,我正在研究新的第三方物流,以使我的自制工作流程更好地工作 现在,我进入了任务的迷宫。延迟和线程。睡眠。实际上,Task.Delay50.Wait与Thread.Sleep500一样工作。那么我应该在代码中使用哪一个呢 从互联网上的许多文章中,我有一个印象,Task.Delay支持取消该线程。Sleep不支持,所以如果我只想在一段时间内阻止我的线程而不取消,那么使用Thread.Sleep会比Task.Delay更好吗 可能Thread.Sleep(可以直接调用Sleep API)比Task.De

我正在研究新的第三方物流,以使我的自制工作流程更好地工作

现在,我进入了任务的迷宫。延迟和线程。睡眠。实际上,Task.Delay50.Wait与Thread.Sleep500一样工作。那么我应该在代码中使用哪一个呢

从互联网上的许多文章中,我有一个印象,Task.Delay支持取消该线程。Sleep不支持,所以如果我只想在一段时间内阻止我的线程而不取消,那么使用Thread.Sleep会比Task.Delay更好吗

可能Thread.Sleep(可以直接调用Sleep API)比Task.Delay(创建任务对象)更好。Deley需要更多的开销和更长的代码

代码越简单越好。

可能Thread.Sleep(可以直接调用Sleep API)比Task.Delay(创建任务对象)更好。Deley需要更多的开销和更长的代码


代码越简单越好。

如果您需要取消任务,延迟是一个简单的解决方案。睡眠:它构造了一个计时器,当你等待这个任务时,你构造了一个等待句柄,这个等待句柄由计时器发出信号

也就是说,您只会在紧密循环中注意到这种开销,而睡眠节流循环很少紧密

使用Thread.Sleep进行阻塞而不取消。这是一直以来的做法。这是众所周知的和惯用的。使用任务。延迟…等待;取消支持


你可以用很多其他的方法。例如,构造一个信号量LIM或TaskCompletionSource并使用CancellationToken等待它。这并不像Task.Delay那么简单。

如果您需要取消,Task.Delay是一个简单的解决方案。睡眠:它构造了一个计时器,当你等待这个任务时,你构造了一个等待句柄,这个等待句柄由计时器发出信号

也就是说,您只会在紧密循环中注意到这种开销,而睡眠节流循环很少紧密

使用Thread.Sleep进行阻塞而不取消。这是一直以来的做法。这是众所周知的和惯用的。使用任务。延迟…等待;取消支持


你可以用很多其他的方法。例如,构造一个信号量LIM或TaskCompletionSource并使用CancellationToken等待它。这不像任务那么简单。延迟,虽然。

我不想假设一个单独的问题,但我感兴趣的是-在这种情况下,最好使用计时器?@BoguszM任务。延迟使用计时器我不想假设一个单独的问题,但我感兴趣的是-在这种情况下,最好使用计时器?@BoguszM任务。延迟使用计时器