예제 #1
0
            public Task InvokeAsync(Func <Task> asyncAction)
            {
                var completion = new RendererSynchronizationTaskCompletionSource <Func <Task>, object>(asyncAction);

                ExecuteSynchronouslyIfPossible(async(state) =>
                {
                    var completion = (RendererSynchronizationTaskCompletionSource <Func <Task>, object>)state;
                    try
                    {
                        await completion.Callback();
                        completion.SetResult(null);
                    }
                    catch (OperationCanceledException)
                    {
                        completion.SetCanceled();
                    }
                    catch (Exception exception)
                    {
                        completion.SetException(exception);
                    }
                }, completion);

                return(completion.Task);
            }
        public Task <TResult> InvokeAsync <TResult>(Func <TResult> function)
        {
            var completion = new RendererSynchronizationTaskCompletionSource <Func <TResult>, TResult>(function);

            ExecuteSynchronouslyIfPossible((state) =>
            {
                var completion = (RendererSynchronizationTaskCompletionSource <Func <TResult>, TResult>)state;
                try
                {
                    var result = completion.Callback();
                    completion.SetResult(result);
                }
                catch (OperationCanceledException)
                {
                    completion.SetCanceled();
                }
                catch (Exception exception)
                {
                    completion.SetException(exception);
                }
            }, completion);

            return(completion.Task);
        }