我是初学者,对这个问题不太了解。但显然,所有这些语句都允许应用程序在后台线程中运行其任务。这真令人困惑。哪些应该使用/不使用或首选?
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
。哪些以及什么时候应该使用?
答案 0 :(得分:2)
Task.Run相当于创建任务然后运行Start。这些任务在线程池上运行。通常,对于现代C#.NET中的后台操作,这就是你想要的。
您将在遗留代码中看到使用Task.Factory.StartNew,但Microsoft建议将Task.Run用于现代计算绑定任务。
手动创建线程是一种较低级别的操作并绕过线程池。通常这不是您想要的,因为线程池将处理诸如不创建太多线程之类的事情,并且还允许您编写异步代码,具有延续,传递同步上下文等。
通常建议您使用Task.Run。