public static async Task <TOutput> RunInvokeAsync <TOutput, TPolly>(this Control ctrl,
                                                                            TPolly action)
            where TPolly : struct, IPollyFunc <TOutput>

        {
            var src = new InvokeActionCompletionSource <TOutput>(action.Execute, ctrl);

            return(await src.Task);
        }
        public static async Task <T> RunInvokeAsync <T>(this Control ctrl,
                                                        Func <T> action)
        {
            if (!ctrl.InvokeRequired)
            {
                return(action());
            }

            var src = new InvokeActionCompletionSource <T>(action, ctrl);

            return(await src.Task);
        }
 public static async Task RunInvokeAsync(this Control ctrl,
                                         Action action)
 {
     if (!ctrl.InvokeRequired)
     {
         action();
     }
     else
     {
         var src = new InvokeActionCompletionSource <Object>(action, ctrl);
         await src.Task;
     }
 }