等待Task.Factory.StartNew(()=>与Task.Start;等待任务;
这两种使用等待forms之间是否有任何function差异?
-
string x = await Task.Factory.StartNew(() => GetAnimal("feline"));
-
Task myTask = new Task(() => GetAnimal("feline")); myTask.Start(); string z = await myTask;
具体来说,在1中调用每个操作的顺序是什么? 是StartNew被调用然后等待调用,还是等待在1中首先调用?
StartNew
只是创建和启动任务的简便手段 。 如果要在启动之前对Task
实例执行某些操作,请使用构造函数。 如果您只想立即创建并启动任务,请使用简写。
StartNew
文档说:
调用StartNew在function上等同于使用其构造函数之一创建任务,然后调用Task.Start方法来安排任务执行。
当您使用async
和await
编写代码时,应尽可能使用Task.Run
。
Task
构造函数(和Task.Start
)是来自Task Parallel Library的保留,用于创建尚未启动的任务。 不应在async
代码中使用Task
构造函数和Task.Start
。
类似地, TaskFactory.StartNew
是一个较旧的方法,它不使用async
任务的最佳默认值,也不了解async
lambdas。 它在一些情况下很有用,但绝大多数时候Task.Run
更适合async
代码。
没有区别。 它们产生完全相同的IL代码。