.NET - Task.Run vs Task.Factory.StartNew
我们引入了新的 Task.Run
方法。这决不是要淘汰 Task.Factory.StartNew
,而是应该简单地认为这是使用 Task.Factory.StartNew
而不必传递一堆参数的一个便捷方式。这是一个捷径。事实上,Task.Run
实际是按照与 Task.Factory.StartNew
相同的逻辑实现的,只是传入了一些默认的参数.
通过这种方式,Task.Run
就可以并且应该被用于大多数通用场景——简单地将工作交给线程池ThreadPool
处理(即参数 TaskScheduler.Default 的目标)。这并不意味着 Task.Factory.StartNew
将不再被使用; 远非如此,Task.Factory.StartNew
还有很多重要的(固然更高级)用途。你可以控制 TaskCreationOptions
来控制任务的行为,可以控制 TaskScheduler
来控制任务的调度和运行,也可以使用接收对象状态的重载,对于性能敏感的代码路径,使用该重载可以避免闭包和相应的内存分配。不过,对于简单的情况,Task.Run
是你的朋友。