private void ScheduleHeartbeat(IHeartbeatScheduleItem heartbeatScheduleItem) { var timerCallback = new TimerCallback((state) => Task.Factory.StartNew(async() => await PublishHeartbeatMessageAsync(state as IHeartbeatScheduleItem).ConfigureAwait(false))); var timer = new Timer(timerCallback, heartbeatScheduleItem, TimeSpan.Zero, TimeSpan.FromSeconds(heartbeatScheduleItem.IntervalInSeconds)); HeartbeatTimers.Add(timer); ReferenceManager.AddObject(timer); }
private async Task PublishHeartbeatMessageAsync(IHeartbeatScheduleItem scheduleItem) { try { using (var dependencyScope = CreateDependencyScope()) { var messagePublishingClient = dependencyScope.Resolve <IMessagePublishingClient>(); await scheduleItem.PublishHeartbeatMessageAsync(messagePublishingClient).ConfigureAwait(false); } } catch (MessagePublishingException) { throw; } catch (Exception exception) { throw new MessagePublishingException(typeof(HeartbeatMessage), exception); } }