运行时的服务工作者

时间:2019-11-18 10:03:47

标签: c# .net-core worker

我最近在.net core 3.0中发现了工作程序服务,这对于我当前正在从事的项目来说听起来很完美。

每隔一段时间,我的服务将(从数据库/文件/任何内容)收集需要执行的任务。然后,我想对这些任务进行排队,并逐一执行任务以使它们自己执行。

我为此准备了自己的家庭酿造解决方案,但是,如上所述,工人服务听起来像是一个更好的经过验证的解决方案。

我阅读了一些有关该主题的教程,它们都使用几乎相同的方法。从向导创建一个新项目,然后从那里进行解释。从默认模板中,我知道这将衍生出worker服务:

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

但是,我需要某种方式在运行时启动这些工作程序,但是我找不到任何有关执行此操作的准则。

1 个答案:

答案 0 :(得分:1)

我不会费劲地按需启动ThreadsWorkers

这就是我要做的:

  1. 将一个工作者服务作为“ Watchdog”:查找新的“任务”。如果找到,将它们放入某种队列中。

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

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