C# NET中的任务管理
在我的应用程序中,我接收消息和调用的事件。事件在库中定义,因此我只能订阅C# NET中的任务管理,c#,.net,parallel-processing,task,C#,.net,Parallel Processing,Task,在我的应用程序中,我接收消息和调用的事件。事件在库中定义,因此我只能订阅 consumer.Received += (model, ea) => new Task(() => { var body = ea.Body; var message = Encoding.UTF8.GetString(body); Console.WriteLine(message); }).Start(); 收到消息时,我运行新任务。但是,它可以是非常大量的消息和正在运行的任务。我想,
consumer.Received += (model, ea) => new Task(() =>
{
var body = ea.Body;
var message = Encoding.UTF8.GetString(body);
Console.WriteLine(message);
}).Start();
收到消息时,我运行新任务。但是,它可以是非常大量的消息和正在运行的任务。我想,当我使用new
Task().Start()
时,它会立即启动,所以我的系统可能会过载。问题是:如何管理任务,而不创建具有固定数量的运行任务的容器,因为我想对.NET使用最大的能力和信任管理。谢谢。在这里,任务将排队到线程池,并根据其启发式执行
对.NET的信任管理
嗯。。。运行时关于什么任务调度是最优的信息有限。有时候你需要控制自己。特别是,如果您正在执行IO。我对CPU有限的工作负载没有太多经验,但它们应该更适合默认的调度
很难推荐具体的东西,因为不清楚示例代码在实际工作负载中的代表性。如果这是基于IO的,您肯定不应该依赖线程池启发式。TPL不知道您的IO设备可以做什么
在这里,由于您没有使用异步IO(在示例代码中),因此如果您想要控制,可以使用TaskScheduler
抽象来创建并行度有限的任务调度器
最好是测试一个现实的工作负载。如果发现创建的线程太多,可以将并行度限制为合理的值