Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在.NET Core 5的托管服务的StartAsync和StopAsync中返回什么?_C#_.net Core_Asp.net Core 5.0_Asp.net Core Hosted Services - Fatal编程技术网

C# 在.NET Core 5的托管服务的StartAsync和StopAsync中返回什么?

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面板中看到每个服务的状态。因此,在我的解决方案中: 在

为了大致了解这一点,我在StartUp类中的作用域服务之后添加了一个托管服务

我读过很多文章和博客,但我无法理解在方法结束时应该返回什么。现在看来这似乎是可行的,但我可以清楚地看到,我没有使用异步调用并返回一个虚拟函数,甚至在停止时也没有这样做,这违反了我的想法!因此,我可以有把握地得出结论,我做错了,虽然不是很明显,但我相信它会在未来咬我的后腿


我应该在实现中返回什么来确保我使用的不是框架?

我有一个包含许多服务的服务框架,并且我可以在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();
  }
}