目前,在.net核心BackgroundService
中实际运行Http Server的最佳方法是什么,即运行很容易,但是如何正确集成停止方法。
此刻,我已经编写了如下代码:
var server = new Server
{
Services = {ConnectionHandler.BindService(_vpnConnectionHandler)},
Ports = {new ServerPort("0.0.0.0", 50055, ServerCredentials.Insecure)}
};
var source = new TaskCompletionSource<bool>();
stoppingToken.Register(async () => await server.ShutdownAsync());
server.Start();
if (!stoppingToken.IsCancellationRequested)
{
await source.Task;
}
在我有类似的东西之前
while(!stoppingToken.IsCancellationRequested) {}
await server.ShutdownAsync()
但是性能真的很差。
这实际上是正确的方法吗?
还是有更好的方法? (IApplicationLifetime
)?
答案 0 :(得分:2)
BackgroundService
实现IHostedService
。您可以实现自己的小型后台服务,该服务还实现IHostedService
:
public class YourBackgroundService : IHostedService
{
private Server _server;
public Task StartAsync(CancellationToken cancellationToken)
{
_server = new Server
{
Services = {ConnectionHandler.BindService(_vpnConnectionHandler)},
Ports = {new ServerPort("0.0.0.0", 50055, ServerCredentials.Insecure)}
};
_server.Start();
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return server?.ShutdownAsync() ?? Task.CompletedTask;
}
}