C# 我是否应该更换所有的;“新线程”;加上;Task.Factory.StartNew“;?

C# 我是否应该更换所有的;“新线程”;加上;Task.Factory.StartNew“;?,c#,C#,我读过关于任务的优点的书 msdn还说“…在.NETFramework4中,任务是编写多线程、异步和并行代码的首选API。” 现在,我的程序包含这样的代码,用于从udp接收多播数据: thread = new Thread(WhileTrueFunctionToReceiveDataFromUdp); ..... thread.Start(); 我有几个这样的线程为每个插座。 我是否最好将此代码替换为使用Task?这取决于您正在执行的操作-如果您不打算使用Task和TPL中的任何新功能,并且您

我读过关于任务的优点的书

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

现在,我的程序包含这样的代码,用于从udp接收多播数据:

thread = new Thread(WhileTrueFunctionToReceiveDataFromUdp);
.....
thread.Start();
我有几个这样的线程为每个插座。
我是否最好将此代码替换为使用
Task

这取决于您正在执行的操作-如果您不打算使用
Task
和TPL中的任何新功能,并且您现有的代码正常工作,则没有理由更改

然而,
Task
有许多优点,特别是对于希望在线程池线程中运行并返回结果的操作


另外,考虑到您正在使用“每个套接字的线程”,您可能会有更长的线程寿命。因此,如果您切换到
Task.Factory.StartNew
,您可能需要指定任务应该是,否则您将使用大量线程池线程来处理套接字数据(使用默认的调度程序)。

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

  • 您想使用
    Tasks

  • 个人学习

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


希望这能有所帮助。

每个套接字一个线程通常已经足够糟糕了。每个套接字中的许多线程都不是正确的方向,使用线程池而不是自己的线程可能会更糟糕。当然不是。永远不要替换有效的代码。特别是线程代码。Task不会改变线程的行为,它只是让编写这样的代码变得更容易。@Jon那么我应该用什么来接收来自多个套接字的数据呢?@javapowered:我没有实际的Java经验,但大多数C-Alike中都有一些工具,例如,同时等待多个对象(在本例中是套接字)。等待完成后,系统会告诉您是哪个对象导致它完成的。此方案可以从一个线程为多个套接字提供服务。并且没有理由让线程考虑我现在是否要更改此代码<代码>任务应该更快….@javapowered:
任务
不是更快,而是在
中内置了智能的调度机制.NET框架
。这可以使它们更快。它们不会更快——这只是一个更好的编程模型。在引擎盖下,他们使用线程池线程(或普通线程,指定了LongRunning)@javapowered:因此,如果原因实际上是存在
Thread
type对象,请将其更改为
Tasks
。因为您已经读过了,我认为从您自己提供的链接来看,考虑到主机上的CPU,它们的并发管理更聪明。