[英]Should I use Tasks or Threads for this use case
我仍然掌握了.NET 4多线程库,因此我不确定它们是否比低级解决方案更有用。
我有一个消息的BlockingCollection需要发送到某个HTTP服务端点。 通常我的解决方案是创建一个无限循环函数
void DoWork()
{
while(true)
{
var message = collection.Take();
SendMessage();
}
}
启动X个Thread()对象来处理循环。 多个线程占用等待HTTP响应所花费的时间,然后我将分析和调整性能以确定要使用的正确线程数。
这更适合任务吗?
在这种情况下使用Task或Thread时没有太大区别。 两者都会做同样的事情。
我宁愿使用GetConsumingEnumerable
来编写它,以便在没有元素时将其输出。
void DoWork()
{
foreach(var message in collection.GetConsumingEnumerable())
{
SendMessage();
}
}
我不打算就你应该使用哪个提出我的意见,但我会提供一些指导方针。
这篇文章: https : //stackoverflow.com/a/4130204/3317555提供了一些非常好的指导。 由于您正熟悉.NET 4,因此您可能希望尝试两种方式,并在功能方面以及在代码中的外观方面更好地了解哪种风格。
编辑:我会说这个, 不要使用Parallel。
从MSDN开始 - “从.NET Framework 4开始,TPL是编写多线程和并行代码的首选方式。”
http://msdn.microsoft.com/en-us/library/dd460717.aspx
我发现Parallel.ForEach()擅长这样的任务。 它优化了线程数。 它考虑了系统中的核心数以及线程正在做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.