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

        }



    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM