Ancestry.QueryProcessor.Processor.AdHocCall C# (CSharp) Method

AdHocCall() private method

All calls pass through this method.
This handles enforcement of SLA and other cross-cutting concerns.
private AdHocCall ( CancellationToken>.Action makeCall, QueryOptions options ) : void
makeCall CancellationToken>.Action
options QueryOptions Optional option overrides.
return void
        private void AdHocCall(Action<QueryOptions, CancellationToken> makeCall, QueryOptions options)
        {
            var actualOptions = options ?? Settings.DefaultOptions;
            EnforceLimits(actualOptions);
            var token = new CancellationTokenSource();
            var task = Task.Run
            (
                (Action)(() =>
                {
                    makeCall(actualOptions, token.Token);
                }),
                token.Token
            );
            try
            {
                var timeout = actualOptions.QueryLimits.MaximumTime;
                if (!task.Wait(timeout))
                {
                    token.Cancel();
                    task.Wait();
                }
            }
            finally
            {
                task.Dispose();
            }
        }