AccidentalFish.ApplicationSupport.Core.Policies.Implementation.BackoffPolicy.Execute C# (CSharp) Method

Execute() public method

public Execute ( Func function, CancellationToken cancellationToken ) : void
function Func
cancellationToken System.Threading.CancellationToken
return void
        public void Execute(Func<bool> function, CancellationToken cancellationToken)
        {
            do
            {
                bool result = true;
                while (result && !cancellationToken.IsCancellationRequested)
                {
                    result = function();
                }

                IEnumerator<TimeSpan> enumerator = _backoffTimings.GetEnumerator();
                enumerator.MoveNext();
                TimeSpan currentWaitTime = enumerator.Current;

                if (!result)
                {
                    _logger?.Verbose("BackoffPolicy - backing off to {0}ms", currentWaitTime.TotalMilliseconds);
                }
                while (!result && !cancellationToken.WaitHandle.WaitOne(currentWaitTime))
                {
                    result = function();
                    if (!result)
                    {
                        if (enumerator.MoveNext())
                        {
                            currentWaitTime = enumerator.Current;
                        }
                    }
                }
            }
            while (!cancellationToken.IsCancellationRequested);
        }
    }

Same methods

BackoffPolicy::Execute ( Func function, IWaitHandle waitHandle ) : void