JoeSmith3100
@JoeSmith3100
Начинающий программист C#

Как применяют Task.Run когда у целевого метода есть параметры?

Допустим есть такой код
private void window_KeyDown(object sender, KeyEventArgs e)
{
        ...???...
}

private async Task moveObj(KeyEventArgs e)
{
        await obj.handleKeyArrow(e);
}


Вот и два вопроса: уместно ли нам использовать task.run и если да то как туда передать метод с параметрами
  • Вопрос задан
  • 172 просмотра
Решения вопроса 1
sarapinit
@sarapinit Куратор тега C#
Точу водой камень
Если это WPF, то
private async void window_KeyDown(object sender, KeyEventArgs e)
{
    await moveObj(e);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
freeExec
@freeExec
Участник OpenStreetMap
Там же есть перегрузка, когда таску можно отправить объект в качестве параметра.
Ответ написан
@none7
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 всегда можно добавить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы