我最近在.net core 3.0中发现了工作程序服务,这对于我当前正在从事的项目来说听起来很完美。
每隔一段时间,我的服务将(从数据库/文件/任何内容)收集需要执行的任务。然后,我想对这些任务进行排队,并逐一执行任务以使它们自己执行。
我为此准备了自己的家庭酿造解决方案,但是,如上所述,工人服务听起来像是一个更好的经过验证的解决方案。
我阅读了一些有关该主题的教程,它们都使用几乎相同的方法。从向导创建一个新项目,然后从那里进行解释。从默认模板中,我知道这将衍生出worker服务:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
但是,我需要某种方式在运行时启动这些工作程序,但是我找不到任何有关执行此操作的准则。
答案 0 :(得分:1)
我不会费劲地按需启动Threads
或Workers
。
这就是我要做的:
将一个工作者服务作为“ Watchdog
”:查找新的“任务”。如果找到,将它们放入某种队列中。
如您所述:您的任务是独立的,不需要“管道”。所以我要么为每个开始“ System.Threading.Tasks.Task
”,要么通过Parallel
启动CPU绑定任务将使用线程池线程,因此对于您的用例来说应该足够了。如果您需要对执行顺序或并行度进行更多控制,则可以考虑使用DataFlow,尽管您可能只有一个Node而不是Pipeline。但这取决于你。