运行时的服务工作者

Service worker at runtime

我最近在 .net core 3.0 中发现了工作者服务,这听起来非常适合我目前正在从事的项目。

每隔一段时间,我的服务将收集(来自 database/file/whatever)需要执行的任务。然后我想对这些任务进行排队,并触发任务让它们自己执行。

我为此设计了自己的自制解决方案,但是,如上所述,worker 服务听起来是解决这个问题的更好的解决方案。

我阅读了几个关于这个主题的教程,它们都使用了几乎相同的方法;从向导创建一个新项目,然后从那里开始解释。从默认模板中,我了解到这将剥离辅助服务:

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
            });

但是,我需要一些方法在 运行 时间启动这些工作人员,但我找不到任何关于如何做到这一点的指南。

我不会承担按需启动 ThreadsWorkers 的麻烦。

我会这样做:

  1. 有一个工人服务为“Watchdog”:寻找新的 "Tasks"。如果找到,将它们放入某种队列中。

  2. 如您所述:您的任务是独立的,不需要 "Pipeline"。所以我要么为每个人开始“System.Threading.Tasks.Task”,要么通过 Parallel

  3. 来处理它们

启动一个 CPU 绑定的任务将使用线程池线程,因此这对您的用例来说应该足够了。如果您需要更多地控制执行顺序或并行度,您可以考虑使用 DataFlow,尽管您可能只有一个节点而不是管道。但这取决于你。