1、文章:https://code.msdn.microsoft.com/ThreadSleep-vs-TaskDelay-766b46b7
2、Thread.Sleep 是同步延迟。 Task.Delay异步延迟。
3、Thread.Sleep 会阻塞线程,Task.Delay不会。
4、Thread.Sleep不能取消,Task.Delay可以。
5、反编译Task.Delay,基本上讲它就是个包裹在任务中的定时器。
-
public static Task Delay(int millisecondsDelay, CancellationToken cancellationToken)
-
{
-
if (millisecondsDelay < -1)
-
{
-
throw new ArgumentOutOfRangeException("millisecondsDelay", Environment.GetResourceString("Task_Delay_InvalidMillisecondsDelay"));
-
}
-
if (cancellationToken.IsCancellationRequested)
-
{
-
return FromCancellation(cancellationToken);
-
}
-
if (millisecondsDelay == 0)
-
{
-
return CompletedTask;
-
}
-
DelayPromise state = new DelayPromise(cancellationToken);
-
if (cancellationToken.CanBeCanceled)
-
{
-
state.Registration = cancellationToken.InternalRegisterWithoutEC(delegate (object state) {
-
((DelayPromise) state).Complete();
-
}, state);
-
}
-
if (millisecondsDelay != -1)
-
{
-
state.Timer = new Timer(delegate (object state) {
-
((DelayPromise) state).Complete();
-
}, state, millisecondsDelay, -1);
-
state.Timer.KeepRootedWhileScheduled();
-
}
-
return state;
-
}
Task.Delay方法只会延缓异步方法中后续部分执行时间,当程序执行到await表达时,一方面会立即返回调用方法,执行调用方法中的剩余部分,这一部分程序的执行不会延长。另一方面根据Delay()方法中的参数,延时对异步方法中后续部分的执行。
using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;using System.Threading.Tasks; namespace Task_Delay{ class Program { static void Main(string[] args) { Simple ds = new Simple(); ds.DoRun(); Console.Read(); } } class Simple { Stopwatch sw = new Stopwatch(); public void DoRun() { Console.WriteLine("Caller: Before call"); ShowDealyAsync(); Console.WriteLine("Caller: After call"); } private async void ShowDealyAsync() { sw.Start(); Console.WriteLine(" Before Delay: {0}",sw.ElapsedMilliseconds); await Task.Delay(5000); //执行到await表达式时,立即返回到调用方法,等待5秒后执行后续部分 Console.WriteLine(" After Delay : {0}",sw.ElapsedMilliseconds );//后续部分 } }}
---------------------
作者:abc13222880223
来源:CSDN
原文:https://blog.csdn.net/ABC13222880223/article/details/85052247
版权声明:本文为博主原创文章,转载请附上博文链接!