Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# NET中的任务管理_C#_.net_Parallel Processing_Task - Fatal编程技术网

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
抽象来创建并行度有限的任务调度器

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