C# .net核心后台服务Http服务器/GRPC-停止方法?
目前,在.net coreC# .net核心后台服务Http服务器/GRPC-停止方法?,c#,.net,.net-core,C#,.net,.net Core,目前,在.net coreBackgroundService中实际运行Http服务器的最佳方式是什么,即运行很容易,但如何真正正确地集成停止方法 目前我编写的代码如下: var server = new Server { Services = {ConnectionHandler.BindService(_vpnConnectionHandler)}, Ports = {new ServerPort("0.0.0.0", 50055, ServerCredentials.Inse
BackgroundService
中实际运行Http服务器的最佳方式是什么,即运行很容易,但如何真正正确地集成停止方法
目前我编写的代码如下:
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;
}
但是表演真的很糟糕
这真的是正确的做法吗?
还是有更好的方法?(
iaapplicationlifetime
) 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;
}
}
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;
}
}