【问题标题】:.NET: So many ways to start tasks on new threads; Which to use? [duplicate].NET:在新线程上启动任务的方法有很多;使用哪个? [复制]
【发布时间】:2016-10-20 11:15:34
【问题描述】:

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

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。这些应该在什么时候使用?

【问题讨论】:

  • Task 的不同形式在msdn.microsoft.com/en-us/library/… 的文档中进行了清楚的讨论。有什么具体的不清楚吗?
  • 非常广泛的问题。 “C# 中有很多功能。我什么时候使用每个功能?”

标签: c# .net multithreading task


【解决方案1】:

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

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

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

通常建议您使用 Task.Run。

【讨论】:

  • 谢谢...很有帮助。我还会阅读 Claies 评论中建议的链接...可能会有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多