static Task ProxyRun<T1,T2> (Action<T1> action, T1 arg1,) {
return Task.Run(() => action(arg1));
}
static Task ProxyRun<T1,T2> (Action<T1,T2> action, T1 arg1, T2 arg2) {
return Task.Run(() => action(arg1, arg2));
}
static Task<TResult> ProxyRun<T1,TResult> (Func<T1,T2,TResult> action, T1 arg1,) {
return Task<TResult>.Run(() => action(arg1, arg2));
}
static Task<TResult> ProxyRun<T1,T2,TResult> (Func<T1,T2,TResult> action, T1 arg1, T2 arg2) {
return Task<TResult>.Run(() => action(arg1, arg2));
}
static Task StartNew<T1,T2> (this TaskFactory taskFactory, Action<T1,T2> action, T1 arg1, T2 arg2) {
return taskFactory.StartNew(() => action(arg1, arg2));
}
И таких обёрток Вы можете наплодить сколько душе угодно, даже если не хватит существующих разновидностей Func и Action всегда можно добавить.