等待Task.Factory.StartNew(()=>与Task.Start;等待任务;

use*_*r42 25 c# async-await c#-5.0

这两种使用等待形式之间是否有任何功能差异?

  1. string x = await Task.Factory.StartNew(() => GetAnimal("feline"));
    
    Run Code Online (Sandbox Code Playgroud)
  2. Task<string> myTask = new Task<string>(() => GetAnimal("feline"));
    myTask.Start();
    string z = await myTask;
    
    Run Code Online (Sandbox Code Playgroud)

具体来说,在1中调用每个操作的顺序是什么?是否已调用StartNew然后等待调用,或等待在1中首先调用?

Ste*_*ary 29

当您使用async和编写代码时await,应Task.Run尽可能使用.

Task构造函数(和Task.Start)从任务并行库,用于创建尚未启动的任务遗留下来的.该Task构造和Task.Start不应该使用async的代码.

同样,这TaskFactory.StartNew是一种较旧的方法,它不使用最佳的async任务默认值,也不了解asynclambdas.它在某些情况下很有用,但绝大多数情况下代码Task.Run更好async.

  • 你可以说'var result = await Task.Run(()=> GetAnimal("feline"));` (6认同)

Bri*_*sen 16

StartNew只是创建和启动任务简短手段.如果要Task在启动它之前对实例执行某些操作,请使用构造函数.如果您只想立即创建并启动任务,请使用简写.

文档StartNew说:

调用StartNew在功能上等同于使用其构造函数之一创建任务,然后调用Task.Start方法来安排任务执行.