using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace ... ...
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 void 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 void 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); } } } }