zoukankan      html  css  js  c++  java
  • c#异步--async和await的使用

    async/await是C#5.0中推出的

    async用来修饰方法,表明这个方法是异步的,声明的方法的返回类型必须为:void,Task或Task<TResult>。

    Task<TResult>就是有返回值的Task,TResult就是返回值类型。比如Task<int>

    await必须用来修饰Task或Task<TResult>,而且只能出现在已经用async关键字修饰的异步方法中。

    通常情况下,async/await成对出现才有意义,

    await可以让主线程等待后台线程执行完毕

    await不会阻塞主线程

    下面用例子来说明

    class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("1:" +Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("Main方法执行开始");
                Run();
                Console.WriteLine("Main方法执行结束");
                Console.Read();
            }
    
            static async void Run()
            {
                Console.WriteLine("2:" +Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("Run方法执行开始");
                await Task.Run(()=> {
                   Console.WriteLine("Task.Run方法执行开始");
                   Console.WriteLine("3:" +Thread.CurrentThread.ManagedThreadId);
                    Thread.Sleep(10000);
                   Console.WriteLine("Task.Run方法执行结束");
                });
    
                Console.WriteLine("4:" +Thread.CurrentThread.ManagedThreadId);
                Console.WriteLine("Run方法执行结束");
            }
        }

     

    常见错误

    1 异步方法的返回类型必须为void、Task 或 Task<T>

    2 如果一个async修饰的方法没有Task.run则会保下面警告

    警告CS1998  此异步方法缺少 "await" 运算符,将以同步方式运行。请考虑使用"await"运算符等待非阻止的API 调用,或者使用"await Task.Run(...)" 在后台线程上执行占用大量CPU 的工作

    总结

    1 async方法必须有Task.Run异步方法

    2 async方法里面通常由await关键字 它用在Task.run前面 作用是告诉主线程 我这边不用你管了 你继续执行你自己的。在await之前还是属于主线程的。还是同步的。

    3 await代码之前是主线程await之后包括Task.Run以及它后面的代码 都是另外一个线程。

  • 相关阅读:
    flex datagrid进行删除或增加操作后自动刷新
    java 一个很简单的applet
    转:35岁前必成功的12级跳(男女通用)
    flex DisplayObject UIComponent的区别
    flex flash.utils.Dictionary和Object
    java 正则表达式进行剔除字符
    Flex 元数据标签使用
    使用TableAdapter的Update方法使用注意事项
    android中捕捉menu按键的点击事件
    Repeater 嵌套repeater输出不规则列表
  • 原文地址:https://www.cnblogs.com/zhangzhiping35/p/11058725.html
Copyright © 2011-2022 走看看