小编Lio*_*ioH的帖子

ASP .Net Core 排队后台任务并行处理

我有一个 ASP .NET core Web API,它使用此处描述的排队后台任务 。

我已使用提供的代码示例并添加了IBackgroundTaskQueue,BackgroundTaskQueue和 ,QueuedHostedService完全按照文章中所述。

在 my 中Startup.cs,我仅注册一个QueuedHostedService实例,如下所示:services.AddHostedService<QueuedHostedService>();

来自 WebApi 控制器的任务将被入队,然后出队并由QueuedHostedService.

我希望允许多个后台处理线程使传入的任务出队并执行。我能想到的最直接的解决方案是QueuedHostedService在我的Startup.cs. 即,像这样:

 int maxNumOfParallelOperations;
 var isValid = int.TryParse(Configuration["App:MaxNumOfParallelOperations"], out maxNumOfParallelOperations);

 maxNumOfParallelOperations = isValid && maxNumOfParallelOperations > 0 ? maxNumOfParallelOperations : 2;

 for (int index = 0; index < maxNumOfParallelOperations; index++) 
 {
    services.AddHostedService<QueuedHostedService>();
 }
Run Code Online (Sandbox Code Playgroud)

我还注意到,由于 中的信号量BackgroundTaskQueueQueuedHostedService实例并不是一直在工作,而是仅在队列中有新任务可用时才唤醒。

这个解决方案在我的测试中似乎效果很好。

但是,在这个特定的用例中 - 它真的是一个有效的、推荐的并行处理解决方案吗?

c# asp.net parallel-processing asp.net-core asp.net-core-hosted-services

5
推荐指数
1
解决办法
6670
查看次数