zoukankan      html  css  js  c++  java
  • c#方法转异步例子

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    
    namespace 亚信电子商务
    {
    
    
        public class Program2
        {
    
            public static void Main(string[] args)
            {
    
                Console.WriteLine("主线程1");
    
                AsyncTest.ToAsync(()=> {
    
                    Thread.Sleep(3000);
    
                    Console.WriteLine("让我用新的线程执行吧,主线程你做你的事吧");
    
                }, () => { Console.WriteLine("回调"); });
    
    
                AsyncTest.ToAsync<string>(() => {
    
                    Thread.Sleep(1000);
                    return "女猪脚和男猪脚结婚了";
    
                }, p => { Console.WriteLine("回调结果:"+ p); });
    
    
                Console.WriteLine("主线程2");
    
                Console.ReadLine();
            }
    
        }
    
    
    
        /// <summary>
        /// 将一个普通方法转为异步方法
        /// </summary>
        public class AsyncTest
        {
            /// <summary>
            /// 把一个普通无参,无返回值的方法转为异步方法
            /// </summary>
            /// <param name="srcAction">要转的方法</param>
            /// <param name="callBack">回调方法</param>
            public static async Task ToAsync(Action srcAction,Action callBack)
            {
                //定义一个异步无返回值的方法,下面写法可能有点绕
                Func<Task> task = () =>
                {
                    return Task.Run(() =>
                    {
                        srcAction();
    
                    });
                };
                await task();
                if (callBack != null)
                {
                    callBack();
                }
            }
    
            /// <summary>
            /// 把一个无参有返回值的方法转为异步方法
            /// </summary>
            /// <typeparam name="T">泛型模板类型</typeparam>
            /// <param name="srcFunc">被转的源方法</param>
            /// <param name="callBack">回调</param>
            public static async Task ToAsync<T>(Func<T> srcFunc, Action<T> callBack)
            {
    
                Func<Task<T>> task = () => {
                    return Task<T>.Run(() => {
    
                        return srcFunc();
                    });
                };
    
                var result = await task();
                if (callBack != null)
                {
                    callBack(result);
                }
    
            }
    
    
    
        }
    }
    

     

  • 相关阅读:
    flare3d_Material3D_shader3D
    判断2个数组是否相等
    js文件下载几种请求方式,普通请求方式封装
    echarts上下柱形图
    已知数组中的一个元素,求其下标
    判断一个数组是否另一个数组的子集
    js中如何判断一个数组是另一个数组的子集
    高德地图
    php过滤和转义函数
    SQLServer表字段默认值相关信息的获取方法
  • 原文地址:https://www.cnblogs.com/pangtu/p/8431094.html
Copyright © 2011-2022 走看看