Тайм-аут размещенных служб.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);

Конечно, метод должен быть помечен как асинхронный.

Другие вопросы по тегам