zoukankan      html  css  js  c++  java
  • C#中 Thread,Task,Async/Await,IAsyncResult 的那些事儿!(转载)

    参考

    利用Task,Async/Await实现异步执行

     public class Program
        {
            static void Main(string[] args)
            {
                for (int i = 0; i < 500; i++)
                {
                    Task<int> s = myFuncAsync2(i, i + 1);
                }
                TEST3();
                Console.ReadKey();
            }
            static public async Task<int> myFuncAsync2(int a, int b)
            {
                Console.WriteLine($"请求值:{a}-----{b}");
                //int sum = await Task.Run(() => { Thread.Sleep(20000); return a + b; });
                //return sum;
                return await Task.Run(() =>
                {
                    Thread.Sleep(200000);
                    var s = TEST(a, b);
                    return s;
                });
            }
            public static int TEST(int a, int b)
            {
                return a + b;
            }
            public static void TEST3()
            {
                Console.WriteLine($"不管前面的堵塞");
            }
        }

    这样写无异步效果==>Task<T>.Result造成死锁

     这样就可以

    利用委托回调实现异步

    using Newtonsoft.Json;
    using Newtonsoft.Json.Linq;
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Reflection;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Threading;
    using System.Threading.Tasks;
    using System.Web.Script.Serialization;
    
    namespace ConsoleApp7
    {
        class Program
        {
            public delegate void AddHandler(int i);
            static void Main(string[] args)
            {
                for (int i = 0; i < 10; i++)
                {
                   // Thread.Sleep(2000);
                    HandlerUploadData(i);
                }
                Console.ReadKey();
            }
           static private void HandlerUploadData(int i)
            {
                AddHandler handler = new AddHandler(PrintingTime);
                handler.BeginInvoke(i, null, null);//异步调用可传多参
                //handler.Invoke(i);//同步调用
            }
    
           static  private void PrintingTime(int i)
            {
                Thread.Sleep(2000);
                Console.WriteLine($"执行时间{DateTime.Now},执行人:{i}");
            }
        }
    }
  • 相关阅读:
    angular笔记_6
    angular笔记_5(全选/反选)
    angular笔记_4(函数)
    angular笔记_3
    angular笔记_2
    常用Sql语句
    IIS服务器环境下某路径下所有PHP接口无法运行报500.19错误
    #前端#文字、图像等元素居中方式之
    nginx如何设置禁止访问文件或文件夹
    git克隆和上传项目
  • 原文地址:https://www.cnblogs.com/macT/p/12049436.html
Copyright © 2011-2022 走看看