我应该用“Task.Factory.StartNew”替换所有“新线程”吗?

时间:2012-03-15 20:18:31

标签: c#

我已经了解了任务Difference between Task (System.Threading.Task) and Thread

的优点

msdn还说“......在.NET Framework 4中,任务是编写多线程,异步和并行代码的首选API。”

现在我的程序包含从udp接收组播数据的代码:

thread = new Thread(WhileTrueFunctionToReceiveDataFromUdp);
.....
thread.Start();

我为每个套接字都有几个这样的线程。 我最好替换此代码以使用Task吗?

2 个答案:

答案 0 :(得分:2)

这取决于您正在做什么 - 如果您不打算使用Task和TPL中的任何新功能,并且现有代码有效,则没有理由进行更改。

但是,Task有许多优点 - 特别是对于要在线程池线程中运行并返回结果的操作。

另外 - 假设你正在使用“每个套接字的线程”,你可能会有更长的生命线程。因此,如果您切换到Task.Factory.StartNew,您可能希望指定任务应该是LongRunning,或者您最终将使用大量ThreadPool线程来获取套接字数据(使用默认调度程序)。

答案 1 :(得分:1)

不要更改已经有效且可以工作的代码中的任何内容(至少根据Microsoft)。仅因以下原因更改它:

  • 您想使用Tasks

  • 提供的新功能
  • 个人学习。

请记住,在操作系统级别上,它们基本上最终会进入相同的OS内核对象。

希望这有帮助。