C#中的异步多线程6 Delay
Task.Delay方法创建一个Task对象,该对象将暂停其在线程中的处理,并在一定时间之后完成。但与Thread.Sleep阻塞线程不同的是,Task.Delay不会阻塞线程,线程可以继续处理其他工作。
class Simple { Stopwatch sw = new Stopwatch(); public void DoRun() { Console.WriteLine("Caller:Before call"); ShowDelayAsync(); Console.WriteLine("Caller:After call"); } private async void ShowDelayAsync() { sw.Start(); Console.WriteLine("Before Delay:{0}", sw.Elapsed.TotalMilliseconds); await Task.Delay(1000); Console.WriteLine("After Delay:{0}", sw.Elapsed.TotalMilliseconds); } } class Program { static void Main(string[] args) { Simple sim = new Simple(); sim.DoRun(); Console.Read(); } }
输出:
aller:Before call
Before Delay:0.0016
Caller:After call
After Delay:1014.0279
Delay方法有4个重载,可以以不同方式指定时间周期,同事允许使用CancellationToken对象。