---.Net Framework 升级至4.5+
需要执行异步操作的方法 函数签名前加上 async 标示 标示这是一个异步方法
public async void Show(String Name)//异步方法 { await InvokeFuncShow("i2");//执行异步操作 InvokeFuncShow异步操作的基本实现 }
在异步方法内执行异步操作
当一系列操作中出现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");
执行会出现
其中i1与i2同步执行 但是i3i4需要等到i2完全执行完成之后方会执行
然后是异步操作的具体实现需要用 Task.Run(Func<>)来完成
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; })); } }
总结起来看 就是
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函数中调用
new AsyncFunc().Show(""); // new AsyncFunc().Show(""); Console.WriteLine(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"); Console.ReadLine();
执行
--以上
时间: 2024-10-06 21:58:05