【发布时间】:2014-03-28 16:07:04
【问题描述】:
我仍在使用 .NET 4 多线程库,所以我不确定它们在这里是否比较低级别的解决方案更有帮助。
我有一个 BlockingCollection 需要发送到某个 HTTP 服务端点的消息。通常我的解决方案是像这样创建一个无限循环函数
void DoWork()
{
while(true)
{
var message = collection.Take();
SendMessage();
}
}
启动 X 个 Thread() 对象来工作循环。多线程考虑了等待 HTTP 响应所花费的时间,然后我会分析和调整性能以确定要使用的正确线程数。
这是否更适合任务?
【问题讨论】:
-
考虑使用异步 IO。完全没有必要捆绑等待IO的线程。 TPL 默认使用 ThreadPool,如果您将大量长期阻塞作业放入其中,该线程池将很快耗尽。
-
不要使用工作线程。使用自然异步 API,例如
HttpClient,喜欢this。
标签: c# .net multithreading