async/await

class program
{
    static vod Main(string[] args)
    {
        Console.WriteLine("Main() Thread ID: [{0}]", Thread.CurrentThread.ManagedThreadId);
        AsyncHandler(); 
        // 打印AsyncHandler()函数在Main()中已经执行完毕的信息
        Console.WriteLine("Handler Finished in Main!");
        // AsyncHandler()在实际执行完成之前就返回了,需要阻塞主线程等待AsyncHandler()真正执行完毕
        Console.ReadLine();
    }

    static async Task<int> Async() => await Task.Run<int>(() =>
    {
        // 线程ID与Handler()方法不同
        Console.WriteLine("Async() Thread ID: [{0}]", Thread.CurrentThread.ManagedThreadId);
        for (int i = 0; i < 5; i++)
        {
            Thread.Sleep(100);
            Console.WriteLine("Async: Run{0}", i);
        }
        Console.WriteLine("Over");
        return 666;
    });

    static async void AsyncHandler()
    {
        // 方法体中的内容实际为同步执行,与Main()函数线程ID相同
        Console.WriteLine("Handler() Thread ID: [{0}]", Thread.CurrentThread.ManagedThreadId);
        // 调用异步方法Async()不会阻塞,Async()方法开始异步执行
        Task<int> task = Async();
        // 每隔0.1s打印输出,此时异步方法Async()也在另一线程中执行,同步打印输出
        for (int i = 0; i < 3; i++)
        {
            Thread.Sleep(100);
            Console.WriteLine("Handler: Run{0}", i);
        }
        // 在使用await之前的代码都运行在与Main()函数相同的线程
        Console.WriteLine("Handler1() Thread ID: [{0}]", Thread.CurrentThread.ManagedThreadId);
        // AsyncHandler()中的循环执行3次,此时异步方法Async()尚未执行完毕,使用await关键字会阻塞函数
        // 在Main()函数中,从调用await开始,AsyncHandler()就已返回了
        Console.WriteLine(await task);
        // 使用await之后的代码运行在Async()方法所处的线程
        Console.WriteLine("Handler2() Thread ID: [{0}]", Thread.CurrentThread.ManagedThreadId);
        // 打印AsyncHandler()函数真正执行完毕信息
        Console.WriteLine("Handler Really Finished!");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值