运行时的服务工作者
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>();
});
但是,我需要一些方法在 运行 时间启动这些工作人员,但我找不到任何关于如何做到这一点的指南。
我不会承担按需启动 Threads
或 Workers
的麻烦。
我会这样做:
有一个工人服务为“Watchdog
”:寻找新的 "Tasks"。如果找到,将它们放入某种队列中。
如您所述:您的任务是独立的,不需要 "Pipeline"。所以我要么为每个人开始“System.Threading.Tasks.Task
”,要么通过 Parallel
来处理它们
启动一个 CPU 绑定的任务将使用线程池线程,因此这对您的用例来说应该足够了。如果您需要更多地控制执行顺序或并行度,您可以考虑使用 DataFlow,尽管您可能只有一个节点而不是管道。但这取决于你。
我最近在 .net core 3.0 中发现了工作者服务,这听起来非常适合我目前正在从事的项目。
每隔一段时间,我的服务将收集(来自 database/file/whatever)需要执行的任务。然后我想对这些任务进行排队,并触发任务让它们自己执行。
我为此设计了自己的自制解决方案,但是,如上所述,worker 服务听起来是解决这个问题的更好的解决方案。
我阅读了几个关于这个主题的教程,它们都使用了几乎相同的方法;从向导创建一个新项目,然后从那里开始解释。从默认模板中,我了解到这将剥离辅助服务:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Worker>();
});
但是,我需要一些方法在 运行 时间启动这些工作人员,但我找不到任何关于如何做到这一点的指南。
我不会承担按需启动 Threads
或 Workers
的麻烦。
我会这样做:
有一个工人服务为“
Watchdog
”:寻找新的 "Tasks"。如果找到,将它们放入某种队列中。如您所述:您的任务是独立的,不需要 "Pipeline"。所以我要么为每个人开始“
System.Threading.Tasks.Task
”,要么通过Parallel
来处理它们
启动一个 CPU 绑定的任务将使用线程池线程,因此这对您的用例来说应该足够了。如果您需要更多地控制执行顺序或并行度,您可以考虑使用 DataFlow,尽管您可能只有一个节点而不是管道。但这取决于你。