예제 #1
0
        public void Dispose()
        {
            if (!_isDisposed)
            {
                SubscriptionTokenSource?.Dispose();
                _isDisposed = true;

                GC.SuppressFinalize(this);
            }
        }
예제 #2
0
        private void InitiateTask(SubscriptionTokenSource subscriptionTokenSource)
        {
            bool state() => _task == null || _task.IsCompleted;

            if (state())
            {
                lock (_taskSync)
                {
                    if (state())
                    {
                        SubscriptionTokenSource?.Dispose();
                        SubscriptionTokenSource = subscriptionTokenSource;

                        _task = Task.Run(async() =>
                        {
                            //Initial delay
                            await Task.Delay(Subscription.Execution.Interval).ConfigureAwait(false);

                            while (!SubscriptionTokenSource.IsCancelled)
                            {
                                try
                                {
                                    await SubscriptionTokenSource.PauseIfRequested().ConfigureAwait(false);
                                    await OnTaskRun().ConfigureAwait(false);
                                }
                                catch (Exception)
                                {
                                    //Catch all exceptions and never allow to throw that causes application to crash.
                                    //TODO : internal logging
                                }
                                finally
                                {
                                    _lastExecuted = DateTime.UtcNow;
                                    await Task.Delay(Subscription.Execution.Interval).ConfigureAwait(false);
                                }
                            }
                        }, SubscriptionTokenSource.CancellationToken);
                    }
                }
            }
        }