zoukankan      html  css  js  c++  java
  • await与async的简单了解

    异步方法的返回类型可以为Task、Task、void。方法不能声明ref或out参数。

    无法捕捉返回类型为void的异步方法引发的异常,如果返回Task或Task的异步方法中出现异常,则在任务等待时将此异常存储在返回的任务中并再次引发

    await运算符将一个异步方法挂起,直到任务完成。await表达式不阻止正在其上运行的线程,相反,它导致编译器将剩下的异步方法注册为等待的任务上的延续(即在异步方法返回结果后,在执行挂起点剩下的操作)。返回至异步方法的调用方。

    Task.WhenAll方法应用于任务集合,WhenAll的应用程序会返回直至集合中每个任务完成时才完成的单个任务

    Task.WhenAny 用于返回集合中的任意任务完成后完成的任务

    await不能等待无返回的异步方法(即异步方法返回值不能为void)

    使用CancellationTokenSource对象可以进行异步任务的取消、在一段时间后取消、完成一个异步任务后取消剩余任务等操作。

    使用 Async 和 Await 的异步编程

    Task启动的线程是后台线程,不过可以通过Wait方法使应用程序等待task执行完成。Task与Thread的一个重要区别是:Task底层是使用线程池,而Thread每次实例化都会创建一个新的线程。通过如下测试:

    	namespace AsyncDelegateDemo
    	{    
    	    class Program
    	    {
    	        static void DoRun1()
    	        {
    	            Console.WriteLine("Thread调用的Thread Id =" + Thread.CurrentThread.ManagedThreadId);
    	        }
    	
    	        static void DoRun2()
    	        {
    	            Thread.Sleep(50);
    	            Console.WriteLine("Task调用Thread Id =" + Thread.CurrentThread.ManagedThreadId);
    	        }
    	
    	        static void Main(string[] args)
    	        {
    	            for (int i = 0; i < 50; i++)
    	            {
    	                new Thread(DoRun1).Start();
    	            }
    	
    	            for (int i = 0; i < 50; i++)
    	            {
    	                Task.Run(() => { DoRun2(); });
    	            }
    	
    	            Console.ReadLine();
    	
    	        }
    	    }
    	}
  • 相关阅读:
    Zookeeper 入门第一篇
    jmap命令
    Java中的原子操作类
    Fel表达式实践
    Fel表达式使用过程中需要注意的问题
    【luoguP1196】 [NOI2002]银河英雄传说--边带权并查集 ,
    【luoguP1955 】[NOI2015]程序自动分析--普通并查集
    【csp模拟赛2】 序列操作
    【csp模拟赛2】 爆搜 方格加数
    HZWER
  • 原文地址:https://www.cnblogs.com/goodlucklzq/p/4469474.html
Copyright © 2011-2022 走看看