异步返回有以下几种类型:
(1).Task<TResult>,用于有返回值的异步方法
(2).Task,用于执行操作但不返回任何值的异步方法。
(3).对于事件处理程序。
一.Task<TResult>返回类型
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Example { class Program { static void Main(string[] args) { string strInfo = ShowTodaysInfo().Result; Console.WriteLine(strInfo); Console.ReadKey(); } private static async Task<string> ShowTodaysInfo() { string ret = String.Format("{0}", await GetLeisureHours()); return ret; } static async Task<int> GetLeisureHours() { var today = await Task.FromResult<string>(DateTime.Now.DayOfWeek.ToString()); int leisureHours; if (today.First() == 'S') leisureHours = 16; else leisureHours = 5; return leisureHours; } } }
二.Task返回类型
不包含return语句或包含return不返回操作数的语句的异步方法通常具有返回类型Task,,如果对异步方法使用Task返回类型,则调用方法可以使用await运算符咋听调用方法的完成,知道调用的异步方法完成。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Example { class Program { static void Main(string[] args) { ShowInfo().Wait(); Console.WriteLine("主线程执行中。。。"); } private async static Task ShowInfo() { Console.WriteLine("异步调用中"); await Task.Delay(2000); } } }
在上述代码中,方法ShowInfo()不包含return语句,但返回Task对象,表示ShowInfo等待完成。