---.Net Framework 升級至4.5+dom
須要執行異步操做的方法 函數簽名前加上 async 標示 標示這是一個異步方法異步
public async void Show(String Name)//異步方法 { await InvokeFuncShow("i2");//執行異步操做 InvokeFuncShow異步操做的基本實現 }
在異步方法內執行異步操做async
當一系列操做中出現await時 則全部await後的操做都會等待await執行完成以後再繼續函數
Console.WriteLine("0000000000000000000000000000000000000"); InvokeFuncShow("i1"); Console.WriteLine("1111111111111111111111111111111111111"); await InvokeFuncShow("i2");//執行異步操做 InvokeFuncShow異步操做的基本實現 Console.WriteLine("222222222222222222222222222222222222222222"); InvokeFuncShow("i3"); Console.WriteLine("33333333333333333333333333333333333333"); await InvokeFuncShow("i4"); Console.WriteLine("4444444444444444444444444444444444444444");
執行會出現ui
其中i1與i2同步執行 可是i3i4須要等到i2徹底執行完成以後方會執行spa
而後是異步操做的具體實現須要用 Task.Run(Func<>)來完成3d
public async Task InvokeFuncShow(String Name) { for (int i = 0; i < 10; i++) { Console.WriteLine( await Task.Run(() => { var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500); System.Threading.Thread.Sleep(Sleep); return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i; })); } }
總結起來看 就是blog
async Task<T> _Func //函數名 須要async修飾 { return await Task.Run(() => //具體實現 { return T; })); } }
完整Code同步
public async void Show(String Name)//異步方法 { Console.WriteLine("0000000000000000000000000000000000000"); FuncShow("i1"); Console.WriteLine("1111111111111111111111111111111111111"); await FuncShow("i2");//執行異步操做 InvokeFuncShow異步操做的基本實現 Console.WriteLine("222222222222222222222222222222222222222222"); FuncShow("i3"); Console.WriteLine("33333333333333333333333333333333333333"); await FuncShow("i4"); Console.WriteLine("4444444444444444444444444444444444444444"); } public async Task FuncShow(String Name) { for (int i = 0; i < 10; i++) { Console.WriteLine( await Task.Run(() => { var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1, 500); System.Threading.Thread.Sleep(Sleep); return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i; })); } } public Task<String> TaskFunc(String Name, Int32 i) { return Task.Run(() => { var Sleep = new Random(Guid.NewGuid().GetHashCode()).Next(1000, 5000); System.Threading.Thread.Sleep(Sleep); return Name + "|||" + DateTime.Now + "|||" + Sleep + "|||" + i; }); }
main函數中調用it
new AsyncFunc().Show(""); // new AsyncFunc().Show(""); Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Console.ReadLine();
執行
--以上