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); }