异步编程(九):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对象。可以通过取消令牌来取消该操作
上一篇 下一篇

猜你喜欢

热点阅读