在我的应用程序中,我接收消息和事件调用。事件是在库中定义的,因此我只能订阅。
consumer.Received += (model, ea) => new Task(() =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(message);
}).Start();当收到消息时,我会运行新任务。但是,它可以是非常大量的消息和运行任务。我想,当我使用新的Task().Start()时,它会立即启动,这样我的系统就会超载。问题是:如何管理任务,而不创建具有固定数量的运行任务的容器,因为我希望在.NET中使用最大的能力和信任管理。
发布于 2016-10-27 07:22:50
在这里,任务排队到线程池,并根据其启发式执行。
对.NET的信任管理
嗯..。运行时有关于什么任务调度是最优的有限信息。有时候你需要控制。特别是,如果你在做IO。我在CPU有限的工作负载方面的经验较少,但是他们应该对默认的调度更好。
很难推荐一些具体的东西,因为不清楚示例代码在实际工作负载中的代表性。如果这是基于IO的,那么绝对不应该依赖线程池启发式。TPL不知道你的IO设备能做什么。
在这里,由于您没有使用异步IO (在示例代码中),所以您可以使用TaskScheduler抽象来创建一个任务调度程序,如果您想控制它的话,它的并行性是有限的。
最好的方法是测试一个实际的工作负载。如果您发现创建了太多的线程,您可以将并行度限制在一个正常的值上。
https://stackoverflow.com/questions/40278057
复制相似问题