首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.NET中的任务管理

.NET中的任务管理
EN

Stack Overflow用户
提问于 2016-10-27 06:53:48
回答 1查看 899关注 0票数 1

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

代码语言:javascript
复制
consumer.Received += (model, ea) => new Task(() =>
{
   var body = ea.Body;
   var message = Encoding.UTF8.GetString(body);
   Console.WriteLine(message);
}).Start();

当收到消息时,我会运行新任务。但是,它可以是非常大量的消息和运行任务。我想,当我使用新的Task().Start()时,它会立即启动,这样我的系统就会超载。问题是:如何管理任务,而不创建具有固定数量的运行任务的容器,因为我希望在.NET中使用最大的能力和信任管理。

EN

回答 1

Stack Overflow用户

发布于 2016-10-27 07:22:50

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

对.NET的信任管理

嗯..。运行时有关于什么任务调度是最优的有限信息。有时候你需要控制。特别是,如果你在做IO。我在CPU有限的工作负载方面的经验较少,但是他们应该对默认的调度更好。

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

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

最好的方法是测试一个实际的工作负载。如果您发现创建了太多的线程,您可以将并行度限制在一个正常的值上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40278057

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档