コード例 #1
0
        public Task InvokeAsync(Func <Task> asyncAction)
        {
            var completion = new PhotinoSynchronizationTaskCompletionSource <Func <Task>, object>(asyncAction);

            ExecuteSynchronouslyIfPossible(async(state) =>
            {
                var completion = (PhotinoSynchronizationTaskCompletionSource <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);
        }
コード例 #2
0
        public Task <TResult> InvokeAsync <TResult>(Func <TResult> function)
        {
            var completion = new PhotinoSynchronizationTaskCompletionSource <Func <TResult>, TResult>(function);

            ExecuteSynchronouslyIfPossible((state) =>
            {
                var completion = (PhotinoSynchronizationTaskCompletionSource <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);
        }