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}");
            }
        }
    }
  • 相关阅读:
    Maven 环境的配置
    zTree的简单例子
    plsql免安装客户端的配置
    HDU 1232 畅通工程
    HDU 5698 瞬间移动
    Codeforces 1015E1 Stars Drawing (Easy Edition)
    Codeforces 784B Santa Claus and Keyboard Check
    Codeforces 500C New Year Book Reading
    NSarray 赋值 拷贝 等问题记录
    UINavigationController 操作记录
  • 原文地址:https://www.cnblogs.com/macT/p/12049436.html
Copyright © 2011-2022 走看看