.NET:在新线程上启动任务的方法很多;哪个用?

时间:2016-06-18 20:51:56

标签: c# .net multithreading task

我是初学者,对这个问题不太了解。但显然,所有这些语句都允许应用程序在后台线程中运行其任务。这真令人困惑。哪些应该使用/不使用或首选?

Task t = new Task( () => doSomeWork() );
t.Start();

Task t = Task.Run( () => doSomeWork1() );

Task t = Task.Factory.StartNew( () => doSomeWork2() );

Thread t = new Thread(new ThreadStart( doSomeWork3 ));
t.Start();

可能还有更像BackgroundWorker。哪些以及什么时候应该使用?

1 个答案:

答案 0 :(得分:2)

Task.Run相当于创建任务然后运行Start。这些任务在线程池上运行。通常,对于现代C#.NET中的后台操作,这就是你想要的。

您将在遗留代码中看到使用Task.Factory.StartNew,但Microsoft建议将Task.Run用于现代计算绑定任务。

手动创建线程是一种较低级别的操作并绕过线程池。通常这不是您想要的,因为线程池将处理诸如不创建太多线程之类的事情,并且还允许您编写异步代码,具有延续,传递同步上下文等。

通常建议您使用Task.Run。