zoukankan      html  css  js  c++  java
  • async & await

    关于 4.5中新增的异步编程新特性总结

    1.用async标记的异步方应该使用await关键子来制定挂起点。await操作符会告诉编译器,这个async方法在完成之前,后面的代码无法继续执行,同时,控制权转移到async方法的调用者

    2.一个async方法里通常包含一个或多个的对应的await操作符,但如果没有await表达式也不会导致编译错误。但如果调用一个async方 法,却不使用await关键字来标记一个挂起点的话,程序将会忽略async关键字并以同步的方式执行

    3.如果指定Task<TResult>为返回结果,那么这个方法必须包含return指定的TResult结果的语句。

    如果使用Task作为返回值,那么这个方法应该不存在使用return语句返回结果的代码,或者返回的结果不参与任何运算(包括赋值操作)

    4.async和await关键字并不会创建额外的线程,async方法不会去请求多线程操作。真正创建线程的操作是由Task.Run()实现的

    5.在一个async方法的内部 当调用异步请求(httpClient.SendAsync)之后开始处理主线程的其他任务,最后在需要异步操作返回结果的地方Awaite等待异步操作的完成 期间 httpClient.SendAsync任务和主线程中的任务是并行运行的(所以可以充分利用Cpu的资源)有两种情况会发生A.在调用Awaite时SendAsync的异步任务已经完成了这个时候await responseMsgTask是在主线程中的,B在awaite时SendAsync的异步任务还未完成这个时候主线程的任务会被阻塞 直到异步任务完成后重新激活主线程的后续任务 这个时候await responseMsgTask是在异步线程中的

    6.Await后的代码也可以放在Task中ContinueWith段来运行

  • 相关阅读:
    HDU 2078 复习时间
    HDU 2076 夹角有多大
    邮票(codevs 2033)
    特种部队(codevs 1427)
    小a和uim之大逃离(洛谷 1373)
    地铁间谍(洛谷 2583)
    推销员(codevs 5126)
    小朋友的数字(codevs 3293)
    车站分级(洛谷 1983)
    Code(poj 17801)
  • 原文地址:https://www.cnblogs.com/chengruhui/p/2937356.html
Copyright © 2011-2022 走看看