Тайм-аут размещенных служб.NET Core
Я начал использовать.NET Core Hosted Services для обработки некоторых функций pub/sub. Я планирую использовать токены отмены, чтобы закрыть сервисы. И мне интересно, есть ли какое-то время для них? Я хочу, чтобы служба работала вечно, если она не была явно остановлена.
Ценю твою помощь.
protected override Task ExecuteAsync(CancellationToken cancellationToken)
{
return Task.Factory.StartNew(
() =>
{
var redisPubSub = new RedisPubSubServer(ClientsManager, Constants.RedisChannel)
{
OnMessage = (channel, msg) =>
{
Trace.WriteLine($"Received '{msg}' from channel '{channel}'");
var message = JsonConvert.DeserializeObject<Message>(msg);
_hubContext.Clients.User(message.UserId.ToString()).SendAsync("ReceiveMessage", message, cancellationToken);
},
OnUnSubscribe = (message) =>
{
Trace.WriteLine($"OnUnSubscribe returns {message}");
},
OnError = (exception) =>
{
Trace.WriteLine($"OnError returns {exception}");
},
OnStart = () =>
{
Trace.WriteLine($"OnStart has been fired.");
},
OnStop = () =>
{
Trace.WriteLine($"OnStop has been fired");
}
};
redisPubSub.Start();
Trace.WriteLine($"OnStop has been fired {redisPubSub.WaitBeforeNextRestart} {redisPubSub.HeartbeatTimeout} {redisPubSub.HeartbeatInterval}");
}, cancellationToken);
}
1 ответ
Если вы посмотрите здесь мой принятый ответ, и ваш хостинг-сервис выглядит примерно так, вы можете просто сделать следующее в цикле while, содержащемся в ExecuteAsync
метод.
await Task.Delay(TimeSpan.FromMinutes(1), cancellationToken);
Конечно, метод должен быть помечен как асинхронный.