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

这两种使用等待forms之间是否有任何function差异?

  1. string x = await Task.Factory.StartNew(() => GetAnimal("feline")); 
  2.  Task myTask = new Task(() => GetAnimal("feline")); myTask.Start(); string z = await myTask; 

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

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

StartNew文档说:

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

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

Task构造函数(和Task.Start )是来自Task Parallel Library的保留,用于创建尚未启动的任务。 不应在async代码中使用Task构造函数和Task.Start

类似地, TaskFactory.StartNew是一个较旧的方法,它不使用async任务的最佳默认值,也不了解async lambdas。 它在一些情况下很有用,但绝大多数时候Task.Run更适合async代码。

没有区别。 它们产生完全相同的IL代码。