工作结束后自动停止Console服务



我有一个使用IServices构建的控制台应用程序,如下所示:

class Program
{
static void Main(string[] args)
// ...
var serviceToUse = args[0];
var host = Host.CreateDefaultBuilder()
.ConfigureServices((context, services) => {
switch (serviceToUse) {
case "first": { services.AddTransient<IService, AlphaService>(); break; }
case "second": { services.AddTransient<IService, BetaService>(); break; }
}
})
.UseSerilog()
.Build();
IService svc;
if (serviceToUse == "alpha") {
svc = ActivatorUtilities.CreateInstance<AlphaService>(host.Services);
}
else {
svc = ActivatorUtilities.CreateInstance<BetaService>(host.Services);
}
List<Entity> entities = Common.GetEntities();

svc.Run(modeToUse, entities);
}

我的服务如下:

public class AlphaService : IHostedService {
public AlphaService(ILogger<AlphaService> log, IConfiguration config) {
_log = log;
_config = config;
}
public async Task StartAsync(CancellationToken cancellationToken) {
// update entities
AlphaRepository.ProcessEntities(_config, alphaEntities);
}
}

public interface IService {
public void Run(string arg, IEnumerable<Entity> alphaEntities);
}

问题是应用程序永远不会结束,即使服务结束了它的工作。有没有一种方法可以"杀死"?工作完成后的申请?

当服务结束时,你需要关闭服务,你需要使用一个服务控制器来检查服务状态,并在服务状态关闭时关闭应用。

ServiceController类

这个答案可能有帮助

使用c# [duplicate]启动和停止服务

注意,在有多个线程或运行服务的应用程序中,必须调用

Environment.Exit(0);

结束应用程序来结束应用程序,否则它将在后台等待来自服务或线程的事件。

相关内容

  • 没有找到相关文章

最新更新