C# 在.NET Core 5的托管服务的StartAsync和StopAsync中返回什么?
为了大致了解这一点,我在StartUp类中的作用域服务之后添加了一个托管服务 我读过很多文章和博客,但我无法理解在方法结束时应该返回什么。现在看来这似乎是可行的,但我可以清楚地看到,我没有使用异步调用并返回一个虚拟函数,甚至在停止时也没有这样做,这违反了我的想法!因此,我可以有把握地得出结论,我做错了,虽然不是很明显,但我相信它会在未来咬我的后腿C# 在.NET Core 5的托管服务的StartAsync和StopAsync中返回什么?,c#,.net-core,asp.net-core-5.0,asp.net-core-hosted-services,C#,.net Core,Asp.net Core 5.0,Asp.net Core Hosted Services,为了大致了解这一点,我在StartUp类中的作用域服务之后添加了一个托管服务 我读过很多文章和博客,但我无法理解在方法结束时应该返回什么。现在看来这似乎是可行的,但我可以清楚地看到,我没有使用异步调用并返回一个虚拟函数,甚至在停止时也没有这样做,这违反了我的想法!因此,我可以有把握地得出结论,我做错了,虽然不是很明显,但我相信它会在未来咬我的后腿 我应该在实现中返回什么来确保我使用的不是框架?我有一个包含许多服务的服务框架,并且我可以在web面板中看到每个服务的状态。因此,在我的解决方案中: 在
我应该在实现中返回什么来确保我使用的不是框架?我有一个包含许多服务的服务框架,并且我可以在web面板中看到每个服务的状态。因此,在我的解决方案中: 在StartAsync方法中,我初始化并启动所有作业,因此系统等待作业完成,完成后,我返回Task.CompletedTask
在StopAsync中,我尝试停止所有作业并确保它们已成功停止,然后返回Task.CompletedTask完全不是op所要求的。问题是关于IHostedService具体实现中返回值的问题。请让我知道你指的是什么类型的值?问题有点深,涉及我应该返回什么/为什么要返回,请求为什么会是异步的等等。此外,还有一部分涉及取消令牌的用途,我不知道如何正确使用。关于取消令牌,谢谢@KonradViltersten,我们将其传递给我们需要的方法,我们的需要取决于任务持续时间,等等,关于以下链接,调用StopAsync时会触发取消令牌。这仍然不是我们要问的问题。
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<IUtilityService, UtilityService>();
services.AddHostedService<StartupService>();
...
}
public class StartupService : IHostedService
{
private IServiceProvider Provider { get; }
public StartupService(IServiceProvider provider)
{
Provider = provider;
}
public Task StartAsync(CancellationToken cancellationToken)
{
IServiceScope scope = Provider.CreateScope();
IUtilityService service = scope.ServiceProvider
.GetRequiredService<IUtilityService>();
service.Seed();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
throw new NotImplementedException();
}
}