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

  • 相关阅读:
    以相同的條件,把多行記錄的某些欄位串在一起
    拆分記錄
    消息推送
    Web API数据传输加密
    OData 带更新的实例,并能取得元数据格式类型
    在ASP.NET Web API中使用OData
    浏览器根对象window之screen
    浏览器从输入到输出的过程与原理五之网络通信和三次握手
    浏览器从输入到输出的过程与原理四之互联网
    浏览器从输入到输出的过程与原理三之DNS
  • 原文地址:https://www.cnblogs.com/Manuel/p/13428232.html
Copyright © 2011-2022 走看看