• 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

  • 相关阅读:
    AWK只打印某个域后的所有域
    Apache配置文件httpd.conf内容翻译
    DOM事件类型详解
    DOM中的事件处理概览与原理的全面剖析
    JavaScript实战(带收放动画效果的导航菜单)
    (转)高性能JavaScript:加载和运行(动态加载JS代码)
    (转)网页性能管理详解
    (转)JavaScript-性能优化之函数节流(throttle)与函数去抖(debounce)
    你真的知道setTimeout是如何运行的吗
    用原生JS读写CSS样式的方法总结
  • 原文地址:https://www.cnblogs.com/Manuel/p/13428232.html
Copyright © 2020-2023  润新知