我已经使用了由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结果-我该怎么做?
1条答案
按热度按时间gr8qqesn1#
在Program.Main中,我希望在host.run()完成后(我放置Console.WriteLine的地方)得到worker结果-我该怎么做?
你需要把它保存在某个地方,比如,保存在一个全局变量或单例变量中。
请记住,Ctrl-C(或其他退出请求)可能导致
Run
在保存结果 * 之前 * 返回,因此结果可能是null
。