gpt4 book ai didi

c# - 编写我自己的 IScheduler 来管理线程,最好的方法是什么?

转载 作者:行者123 更新时间:2023-11-30 22:14:03 25 4
gpt4 key购买 nike

我正在使用 ReactiveUI 的 ReactiveCommand 功能,它非常酷并且可以达到目的。我遇到的唯一问题是,ReactiveCommand 在实例化时需要一个 IScheduler 实现,目前它只提供两个 MainThreadScheduler 和 TaskPoolScheduler,它们都允许为每个 ReactiveCommand 实例创建单独的线程,这是我负担不起的,因为我的应用程序有大量的 ReactiveCommand 实例.

所以我决定拥有自己的 IScheduler 实现,我可以将其传递给 ReactiveCommand 构造函数,而我想做的是拥有某种可配置的 MaxThread;这将不允许超过 MaxThread 线程。

目前我能想到的有两种方式

  1. 每当应用程序启动时,启动这些线程并将它们置于等待状态以尝试从 ActionBlock 中删除任务,当调用 Schedule 时,将该 Action 对象添加到 ActionBlock 实例。

  2. 创建和销毁,与 1 基本相同,但一旦任务完成,就结束线程而不是保持线程存活。

有没有人对我们应该如何完成这个有任何建议?任何输入、代码示例、文章链接或 Github/Codeplex 上的任何内容都将不胜感激。

最佳答案

如果您不想在默认调度程序上为长时间运行的任务启动新线程,那么您可以使用默认调度程序并禁用 ISchedulerLongRunning 优化,如下所示:

Scheduler.Default.DisableOptimizations(typeof(ISchedulerLongRunning));

如果您不这样做,ObserveOn 之类的东西将为每个订阅创建一个新线程

关于c# - 编写我自己的 IScheduler 来管理线程,最好的方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com