c#方法转异步例子

2018-06-24 00:06:45来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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);
            }

        }



    }
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:WinDbg调试.NET程序入门

下一篇:[编程] TCP协议概述