public static async Task <TOutput> RunInvokeAsync <TInput, TOutput>(this Control ctrl,
                                                                            TInput input,
                                                                            Func <TInput, TOutput> action)
        {
            if (!ctrl.InvokeRequired)
            {
                return(action(input));
            }

            var poly = new PollyFunc <TInput, TOutput>(action, input);

            return(await ctrl.RunInvokeAsync <TOutput, PollyFunc <TInput, TOutput> >(poly));
        }
 public static async Task RunInvokeAsync <TInput>(this Control ctrl,
                                                  TInput input,
                                                  Func <TInput, Task> action)
 {
     if (!ctrl.InvokeRequired)
     {
         await action(input);
     }
     else
     {
         var poly = new PollyFunc <TInput, Task>(action, input);
         await ctrl.RunInvokeAsync <Task, PollyFunc <TInput, Task> >(poly);
     }
 }