这个扩展方法定义在TaskExtensions类型中命名空间在SystemThreadingTasksUnwrap会把嵌套的Task<Task>或者Task<Task<T》的结果提取出来 就像这样不用Unwrap的话 static void Main(string[] args) { doo() TaskDelay()Wait() } static async void doo() { //运行嵌套的Task //Task返回Task<Task<string》 //第一个await后result类型为Task<string> var result = await TaskRun<Task<string》(() => { var task = TaskRun<string>(() => { TaskDelay()Wait() return Mgen; }) return task; }) //第二个await后才会返回string ConsoleWriteLine(await result) } 使用Unwrap后结果可以直接从嵌套Task中提取出来 static async void doo() { //运行嵌套的Task //Task返回Task<Task<string》 //await后类型为Task<string>Unwrap后result类型为string var result = await TaskRun<Task<string》(() => { var task = TaskRun<string>(() => { TaskDelay()Wait() return Mgen; }) return task; })Unwrap() //不需要awaitresult已经是string ConsoleWriteLine(result) } |