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

    1,,用同步编码的形式编写异步程序

    namespace AwaitAsyncLibrary
    {
        /// <summary>
        /// await/async:是个新语法,是个语法糖,
        ///             不是一个全新的异步多线程使用方式
        ///             (语法糖:就是编译器提供的新功能)
        ///             本身并不会产生新的线程,但依托于Task而存在,
        ///             所以程序执行时,也是有多线程的
        /// </summary>
    
        class AwaitAsyncClassNew
        {
            public void Show()
            {
                Console.WriteLine($"This Show start  {Thread.CurrentThread.ManagedThreadId}");
                {
                    //this.NoReturn();
                }
                {
                    this.ReturnTask();
                }
                Console.WriteLine($"This Show end  {Thread.CurrentThread.ManagedThreadId}");
            }
    
    
            /// <summary>
            /// 没有返回值---在方法俩面开启了一个Task  线程
            /// </summary>
            /// <returns></returns>
            public void  NoReturn()
            {
                Console.WriteLine($"This Noreturn start  {Thread.CurrentThread.ManagedThreadId}");
               Task task = Task.Run(() =>
                {
                    Console.WriteLine($"This Noreturn Task start  {Thread.CurrentThread.ManagedThreadId}");
                    Thread.Sleep(2000);
                    Console.WriteLine($"This Noreturn Task end  {Thread.CurrentThread.ManagedThreadId}");
    
                });
    
               Console.WriteLine($"This Noreturn  end  {Thread.CurrentThread.ManagedThreadId}");
    
               task.ContinueWith(t =>
                {
                    Console.WriteLine($"This Noreturn  end " +
                                      $" {Thread.CurrentThread.ManagedThreadId}");
                });
            }
    
    
            public async Task ReturnTask()
            {
                Console.WriteLine($"This Noreturn start  {Thread.CurrentThread.ManagedThreadId}");//调用线程执行
                Task task = Task.Run(() =>
                {
                    Console.WriteLine($"This Noreturn Task start  {Thread.CurrentThread.ManagedThreadId}");
                    Thread.Sleep(2000);
                    Console.WriteLine($"This Noreturn Task end  {Thread.CurrentThread.ManagedThreadId}"); //子线程执行
    
                });//调用线程发起,子线程执行
                await task;//调用线程回去忙自己的事
                Console.WriteLine($"This Noreturn  end " +
                                  $" {Thread.CurrentThread.ManagedThreadId}");//子线程执行,如果没有await,
                                                                              //应该是调用线程执行
                //可以认为,加了await就等同于将await后面的代码包装成一个回调
            }
    
        }
    }

    1

  • 相关阅读:
    第二季-专题11-世界一下变大了-MMU
    第二季-专题10-C语言环境初始化
    第二季-专题9--代码搬移不可少
    第二季-专题8-不用内存怎么行
    第二季-专题6-点亮指路灯
    第二季-专题7-ARM跑快了---时钟初始化
    第二季-专题5-核心初始化
    第二季-专题4-我是bootloader设计师
    消除苹果系统对边框的优化
    css3
  • 原文地址:https://www.cnblogs.com/Manuel/p/13428232.html
Copyright © 2011-2022 走看看