我应该用“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内核对象。
希望这可以帮助。