c# - 任务调度器(Task.Factory)和控制线程数

标签 c# multithreading task-parallel-library

我一直在阅读有关多线程的文章,以获得比真正基本的常规“将函数推送到线程池并等待它完成”方法更多的东西。

基本上,我想要更多地控制线程、传递取消 token 的能力、获取返回值等。使用 Task.factory(任务调度程序)这一切看起来都是可能的,据我所知,它运行在线程池的顶部。

如果是这样的话,如果我限制通用线程池上的线程数,那将适用于我的 Task Scheduler 实现还是?

我还读到说使用您自己的线程池比使用线程池要好,我可以将这两者混合起来并获得我想要的控制权吗?

欢迎提出任何建议!感谢您花时间向更多人解释。

最佳答案

您可以创建一个 TaskScheduler that limits concurrency .然后可以使用此自定义调度程序创建您自己的 TaskFactory,并启动使用您希望的控件自定义的任务。

Parallel Extensions Samples项目包括许多您可以用作引用的自定义任务计划程序。

I also read that using your own threadpool is better than THE threadpool, can I mix these two up and get the control I want?

对于大多数一般用途,我实际上不同意这一点。 .NET ThreadPool 非常高效,并且经过高度优化。它包括相当多的指标,用于自动缩放使用的线程数等。

话虽如此,您始终可以制作一个使用专用线程或您自己的“线程池”实现的 TaskScheduler,如果您愿意的话。

关于c# - 任务调度器(Task.Factory)和控制线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15643734/

相关文章:

java - Android Java 每毫秒绘制到 Canvas

c# - 使用 "return"终止或退出 C# 异步方法

c# - 在 "using" block 中,SqlConnection 是否在返回或异常时关闭?

c# - 将项目绑定(bind)到 ListBox 多列

Python3 在网络摄像头 fps 处处理和显示网络摄像头流

c# - ValueTask 的 Task.WhenAll

c# - 如何将 async/await 与使用基于事件的异步模式的库一起使用?

c# - 如何在 ASP.NET Core 路由规则中添加前导零?

c# - 在 PHP 中从 C# 复制相同的 AES 加密

java - 如何在这里应用java ExecutorService和Executors类