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对象。