zoukankan      html  css  js  c++  java
  • async,await.task

    示例代码:

            private void button16_Click(object sender, EventArgs e)
            {
    
                Console.WriteLine("按钮开始" + Thread.CurrentThread.ManagedThreadId.ToString());
                task1();
                Console.WriteLine("按钮结束" + Thread.CurrentThread.ManagedThreadId.ToString());
    
            }
    
            static async Task task1()
            {
    
                Console.WriteLine("task1开始" + Thread.CurrentThread.ManagedThreadId.ToString());
                Thread.Sleep(5);
                task2();
                Console.WriteLine("task1结束" + Thread.CurrentThread.ManagedThreadId.ToString());
    
            }
    
            static async Task<string> task2()
            {
                Console.WriteLine("task2开始" + Thread.CurrentThread.ManagedThreadId.ToString());
                Thread.Sleep(5);
                await Task.Run(() => { Thread.Sleep(10);
                    Console.WriteLine("xxxxxxxxxxxxxxxx" + Thread.CurrentThread.ManagedThreadId.ToString());
                });
    
                Console.WriteLine("task2结束" + Thread.CurrentThread.ManagedThreadId.ToString());
    
                return "ddd";
            }

    async修饰的函数,在被调用时都会开个线程执行,如果加了await当前线程就会等待task2执行完后在往下执行,不加的话,就会并发一起执行。

    有些ORM或者API已经被分装成async的形式了,你为了等他们结束获取结果,需要await他们,而await关键字只能在async函数中使用,以此类推。。

    如果调用有返回的task,在执行获取t.Result时就会等待task2执行完返回才继续往下。

  • 相关阅读:
    重构二叉树
    LeetCode-Construct Binary Tree from Preorder and Inorder Traversal
    二叉平衡树
    二叉树的三种递归与非递归遍历算法
    Jump Game
    Ubuntu中安装最新 Node.js 和 npm
    ORACLE查看并修改最大连接数
    设计模式之工厂模式
    设计模式之单例模式
    设计模式之模板方法模式
  • 原文地址:https://www.cnblogs.com/JinweiChang/p/12519642.html
Copyright © 2011-2022 走看看