• async和await构成的异步方法


    async和await构成的异步方法

    C# 5.0引入了async特性:

    1. private async void DumpWebpageAsync(string uri)
    2. {
    3. WebClient webClient = new WebClient();
    4. string page = await webClient.DownloadStringTaskAsync(uri);
    5. Console.WriteLine(page);
    6. }

    Task和它的子类Task表示异步的操作,它们能够在操作完成时执行回调。回调可以通过它们的ContinueWith方法来传入。C# 5.0引入了await关键字可以实现相同的能力。

    1. asyn标识的异步方法

    1.1 async 方法的返回值

    async标记的方法有三种类型返回值:

    • Task;
    • Task;
    • void。
      对于没有返回值的异步情景,做好还是使用返回Task的async方法,因为返回Task的方法更容易处理诸如异常处理、任务排序等等问题。但是,在使用async来标记UI的事件处理函数时,必须返回void。

    1.2 async与方法签名及接口

    在函数重载、实现接口或者调用方法时,async关键字并不是函数签名的一部分。它只在函数编译时发生作用。正因为如此,在重载方法和实现接口时会完全忽略async关键字。

    1. class BaseClass
    2. {
    3. public virtual async Task<string> Test()
    4. {
    5. ...
    6. }
    7. }
    8. class SubClass : BaseClass
    9. {
    10. public override Task<string> Test()
    11. {
    12. ...
    13. }
    14. }

    Interface类型不能在方法声明中使用async,因为完全可以在实现时决定方法是同步还是异步的。

    1.3 async方法是会扩散的

    使用一个返回Task的异步API的最好方式就是在一个async方法中await它。如果这么做了,那么你的调用者也可能await你的方法。如此一来异步会遍布基本代码,最后形成一个异步方法链。

    1.4 async和匿名委托、Lambda

    • async标识的匿名委托:
    1. Func<Task<int>> getNumberAsync = async delegate{ return 3; }
    • async标识的Lambda:
    1. Func<Task<int>> getNumberAsync = async () => 3;




  • 相关阅读:
    vue 遇到的问题
    vue webpack添加jQuery
    如何将在线电子书保存为pdf格式
    swagger 支持动态host和basePath
    本地chrome调试服务器node
    滚动页面一定距离后固定导航条
    发布-订阅模式
    react生命周期
    redux
    原型及继承
  • 原文地址:https://www.cnblogs.com/qianzi067/p/5843736.html
Copyright © 2020-2023  润新知