.net 异步函数 Async await
一旦为函数添加async关键字 该函数就是一个异步函数。
异步方法必须返回 void 或 Task<> 类型。
public static Task<double> GetValueAsync(double num1, double num2) { return Task.Run(() => { for (int i = 0; i < 10; i++) { Thread.Sleep(500); num1 = num1 + num2; Console.WriteLine("num:{0}", i); } return num1; }); } public static async void DisplayValue() { double result = await GetValueAsync(1234.5, 1.01);//此处会开新线程处理GetValueAsync任务,然后方法马上返回 //这之后的所有代码都会被封装成委托,在GetValueAsync任务完成时调用 System.Diagnostics.Debug.WriteLine("Value is : " + result); }
/// <summary> /// Task<string> 表示一个有返回值异步操作 /// </summary> /// <param name="name"></param> /// <returns></returns> public static async Task<string> IssuerAsync(string name) { var str = ""; var task = Task.Run(() => { Thread.Sleep(2000); Console.WriteLine("task name:{0}", name); str = "my name is " + name; }); //等待任务执行 await task; return str; }
main() 函数
Task<string> task = AsyncAwaitTempte.IssuerAsync("liuyl"); Console.WriteLine("count value:"); for (int i = 0; i < 10; i++) { Console.WriteLine("task:{0}", i); Thread.Sleep(500); } Console.WriteLine("task value:{0}", task.Result);
/// <summary> /// Task<string> 表示一个有返回值异步操作 /// </summary> /// <param name="name"></param> /// <returns></returns> public static async Task<string> IssuerAsync(string name) { string str = ""; var task = new Task(() => { for (int i = 0; i < 4; i++) { Thread.Sleep(1000); Console.WriteLine("task name:{0}", name); } str = "my name is " + name; }); task.Start(); //task.Wait(); 与 await task ; 不能同时使用 //等待任务执行 await task ; return str; }