繁体   English   中英

我应该为此用例使用任务或线程吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM