zoukankan      html  css  js  c++  java
  • .NET 异步 /Task

    老版本的写法经常是以BeginXXX, EndXXX, 或者xx.xxxAsycn(........)

    新的支持 async异步关键字配合Task可读性和易用性比老板好多了。

    新旧例子:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Threading;
    using System.Globalization;
    using System.Net.Http.Headers;
    namespace ConsoleApp2
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestClass class1 = new TestClass();
                class1.TestOldAsycn();
                class1.TestNewAsycn();
                Console.ReadLine();
            }
        }
    
        public class TestClass
        {
    
            private delegate long AddDel(int i, int j);
            public void TestOldAsycn()
            {
    
                AddDel del = Add;
                IAsyncResult ar = del.BeginInvoke(2, 3, MyCallBack, del);//参数里面的del 是用于残敌给回调函数调用,参看回调函数方法里的代码: ar.AsyncState as AddDel;
                                                                         //var result  del.EndInvoke(ar);//获取结果,会阻塞线程
                Console.WriteLine("Main contine .......");
    
            }
            private long Add(int i, int j)
            {
                Console.WriteLine("begin wait 5 sec---------------");
                System.Threading.Thread.Sleep(5000);
                return i + j;
            }
            /// <summary>
            /// callback 获得结果回到函数,beginXXX..里的任务执行完成后才会调用这个
            /// </summary>
            /// <param name="ar"></param>
            private void MyCallBack(IAsyncResult ar)
            {
                var d = ar.AsyncState as AddDel;//ar.AsyncState 是bingXXX里的Object
                var result = (d.EndInvoke(ar));//执行EndXXX获得结果
                Console.WriteLine("result:" + result);
            }
    
    
            //--------------新的.net更方便的Task/Asyc/Await语法----------------------------------------
    
            public async Task TestNewAsycn()
            {
    
                var result = await AddNew(2, 3);    //  OR AddNew(2,3);
                Console.WriteLine("new asycn result:" + result);
            }
    
            private async Task<long> AddNew(int i, int j)
            {
                Console.WriteLine("begin wait 5 sec---------------");
                System.Threading.Thread.Sleep(5000);
                return await Task.FromResult(i + j);
    
            }
    
    
        }
    
    
    
    
    
    }
    

      

  • 相关阅读:
    微信小程序上拉分页
    关于检测数据类型,三种方法(typeof,instanceof,Object.prototype.toString.call())优缺点
    如何在Devc++中配置OpenCv
    数据库系统和应用
    这是一篇测试文档
    Pandas 表格合并
    es6一些好用的方法总结
    前端面试题
    超有趣! JS是怎么计算1+2!!!
    彻底理解闭包
  • 原文地址:https://www.cnblogs.com/wgscd/p/13475113.html
Copyright © 2011-2022 走看看