在 .NET 6 中创建多个后台任务,这些任务在功能方面彼此独立,并根据计划的时间并行/同时运行。使用 Worker 类模板,我能够创建多个托管/后台服务,并且它们按预期运行。
但services.AddHostedService<Worker>();将被视为 Singleton 类,我们需要解决作用域依赖关系,以使服务具有作用域,遵循作用域服务文档中的相同内容。根据上面链接中的示例,示例代码如下所示,作用域服务的接口
namespace App.ScopedService;
public interface IScopedProcessingService
{
Task DoWorkAsync(CancellationToken stoppingToken);
}
Run Code Online (Sandbox Code Playgroud)
以及接口的默认实现
namespace App.ScopedService;
public class DefaultScopedProcessingService : IScopedProcessingService
{
private int _executionCount;
private readonly ILogger<DefaultScopedProcessingService> _logger;
public DefaultScopedProcessingService(
ILogger<DefaultScopedProcessingService> logger) =>
_logger = logger;
public async Task DoWorkAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
++ _executionCount;
_logger.LogInformation(
"{ServiceName} working, execution count: {Count}",
nameof(DefaultScopedProcessingService),
_executionCount);
await Task.Delay(10_000, stoppingToken);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是后台服务实现
namespace App.ScopedService;
public sealed class ScopedBackgroundService …Run Code Online (Sandbox Code Playgroud) c# background-service asp.net-core asp.net-core-hosted-services .net-6.0
我有一个 DateTime 数据类型变量,它绑定到一个日期选择器。
日期选择器 XAML:
<CalendarDatePicker Name="dpDate" VerticalAlignment="Center"
Date="{Binding dpDateTime, ElementName=this, Mode=TwoWay}"
DateChanged="dp_DateChanged">
</CalendarDatePicker>
Run Code Online (Sandbox Code Playgroud)
后面的代码,它设置值:
dpDatetime = DateTime.Now;
Run Code Online (Sandbox Code Playgroud)
但是 datepicker 没有选择当前日期,而是将日期选择为 1/1/1917
c# ×2
.net-6.0 ×1
asp.net-core ×1
asp.net-core-hosted-services ×1
datepicker ×1
uwp ×1
xaml ×1