如何在C# .NET中获取工作者后台服务的结果?

yuvru6vn  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(123)

我已经使用了由Visual Studio 2022生成的工作者服务模板作为示例,但基本上我想知道一旦工作者运行完成并且主机关闭,有什么方法可以找出工作者运行的结果:-

public class Program
  {
    public static void Main(string[] args)
    {
      IHost host = Host.CreateDefaultBuilder(args)
          .ConfigureServices(services =>
          {
            services.AddHostedService<Worker>();
          })
          .Build();

      host.Run();

      Console.WriteLine("how do i get the result here?");
    }
  }

  public class Worker : BackgroundService
  {
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
      _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
      _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
      await Task.Delay(1000, stoppingToken);

      string result = "it worked, processed some stuff";
      _logger.LogInformation(result);

      // _applicationLifetime.StopApplication() command would be here
      // (haven't added all that wiring to keep code clearer, can just do a ctrl-c to emulate)
    }
  }

在Program.Main中,我希望在host.run()完成后(我放置Console.WriteLine的地方)得到worker结果-我该怎么做?

gr8qqesn

gr8qqesn1#

在Program.Main中,我希望在host.run()完成后(我放置Console.WriteLine的地方)得到worker结果-我该怎么做?
你需要把它保存在某个地方,比如,保存在一个全局变量或单例变量中。
请记住,Ctrl-C(或其他退出请求)可能导致Run在保存结果 * 之前 * 返回,因此结果可能是null

相关问题