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

我已经了解了Task(System.Threading.Task)和Thread之间的任务差异的优点

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

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

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

我为每个套接字都有几个这样的线程。 我是否更好地替换此代码以使用Task

这取决于你正在做什么 – 如果你不打算使用Task和TPL中的任何新function,并且你现有的代码有效,那么没有理由改变。

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

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

不要改变已经有效的代码中的任何内容(至少根据微软的说法)。 仅因以下原因更改它:

  • 您想使用Tasks提供的新function

  • 个人学习。

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

希望这可以帮助。