我最近在.net core 3.0中发现了辅助服务,这听起来非常适合我目前正在进行的项目。
每隔一段时间,我的服务就会收集(从数据库/文件/任何东西(需要执行的任务。然后,我想在这些任务中排队,并激发任务,让它们自己执行。
我为此制定了自己的自制解决方案,但如上所述,工人服务听起来是解决这个问题的一个更好的尝试和测试的解决方案。
我读了几个关于这个主题的教程,它们都使用了几乎相同的方法;从向导创建一个新项目,然后从那里开始解释。从默认模板来看,我知道这将衍生出辅助服务:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
然而,我需要一些方法来在运行时提升这些员工,而且我找不到任何关于如何做到这一点的指导方针。
我不会按需启动Threads
或Workers
。
我会这么做:
-
将一个Worker Service作为"
Watchdog
":查找新的"任务"。如果找到,请将它们放入某种队列中。 -
正如您所说:您的任务是独立的,不需要"管道"。所以我要么为每个启动"
System.Threading.Tasks.Task
",要么通过Parallel
处理它们
启动一个绑定CPU的任务将使用线程池线程,因此这对于您的用例来说应该足够了。如果您需要对执行顺序或并行度进行更多控制,您可以考虑DataFlow,尽管您可能只有一个Node而不是Pipeline。但这取决于你。