public static async Task <TResult> RunAsync <TParameter, TResult>(this ExternalEventPair externalEventPair, TParameter parameter) #endif { var genericHandler = (IGenericExternalEventHandler <TParameter, TResult>)externalEventPair.Handler; var task = genericHandler.Prepare(parameter); #if NET40 return(new TaskCompletionSource <TResult>() .Await(externalEventPair.GetTrigger(), (trigger, tcs) => { trigger.Raise(); tcs.Await(task); }).Task); #else var trigger = await externalEventPair.GetTrigger(); trigger.Raise(); return(await task); #endif }