异步编程(九):async/await模式之TaskDelay方
2019-02-24 本文已影响0人
曦航老袁
在异步编程的async/await模式下,可以使用Task.Delay方法创建一个Task对象,该对象将暂停其在线程中的处理,并在一定时间之后继续完成。与Thread.Sleep阻塞线程方法不同的是:Task.Delay不会阻塞线程,线程可以继续处理其他的工作。
下面的代码展示了如何使用Task.Delay方法:
using System;
using System.Diagnostics;
using System.Threading.Tasks;
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.ElapsedMilliseconds);
await Task.Delay(1000);
Console.WriteLine(" After Delay: {0}", sw.ElapsedMilliseconds);
}
}
class Program
{
static void Main()
{
Simple ds = new Simple();
ds.DoRun();
Console.Read();
}
}
Delay方法包含了4个重载,可以以不同的方式指定时间周期,同时也允许使用CancellationToken对象。
签名 | 描述 |
---|---|
Task Delay(int millisecondsDelay) | 在以毫秒表示的延迟时间到期后,返回完成的Task对象 |
Task Delay(TimeSpan span) | 在以.NET TimeSpan对象表示的延迟时间到期后,返回完成的Task对象 |
Task Delay(int millisecondsDelay, CancellationToken token) | 在以毫秒表示的延迟时间到期后,返回完成的Task对象。可以通过取消令牌来取消该操作 |
Task Delay(TimeSpan span, CancellationToken token) | 在以.NET TimeSpan对象表示的延迟时间到期后,返回完成的Task对象。可以通过取消令牌来取消该操作 |