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