. net中的任务管理

本文关键字:任务管理 net | 更新日期: 2023-09-27 18:15:22

在我的应用程序中,我接收消息和调用的事件。事件是在库中定义的,所以我只能订阅。

consumer.Received += (model, ea) => new Task(() =>
{
   var body = ea.Body;
   var message = Encoding.UTF8.GetString(body);
   Console.WriteLine(message);
}).Start();

收到消息时运行新任务。但是,它可以是非常大的消息量和运行任务。我认为,当我使用新的Task().Start()时,它会立即启动,所以我的系统可能会过载。问题是:如何管理任务,而不创建具有固定数量运行任务的容器,因为我想最大限度地使用。net的能力和信任管理。谢谢。

. net中的任务管理

在这里,任务被排队到线程池中,并根据其启发式执行。

信任管理到。net

是的…运行时只有有限的关于什么任务调度是最优的信息。有时候你需要掌控局面。特别是,如果你正在做IO。我对CPU有限的工作负载的经验较少,但它们应该更适合默认调度。

很难推荐一些具体的东西,因为不清楚示例代码如何代表您的实际工作负载。如果这是基于IO的,那么绝对不应该依赖线程池启发式。TPL不知道你的IO设备能做什么。

在这里,因为你没有使用异步IO(在示例代码中),你可以使用TaskScheduler抽象来创建一个任务调度程序,如果你想控制,它具有有限的并行度。

您最好测试一个实际的工作负载。如果您发现创建了太多的线程,您可以将并行度限制为一个相同的值。