Как передать делегата в качестве параметра

Я хочу передать пустоту или int/string/bool (который возвращает значение) Динамически так.

Delay(MyVoid);//I wont to execute a delay here, after the delay it will execute the the param/void like so...
public static void MyVoid()
{
    MessageBox.Show("The void has started!");
}
public async Task MyAsyncMethod(void V)
{
    await Task.Delay(2000);
    V()
}

ps, я пытался использовать делегатов, но это не позволяет использовать его в качестве параметра.


person Daniel Jones    schedule 18.07.2013    source источник
comment
В будущем вместо того, чтобы повторно задавать вопрос, пожалуйста отредактируйте исходный вопрос. Если бы я увидел этот вопрос до публикации своего ответа, я бы просто проголосовал за его закрытие. В нынешнем виде я рекомендую вам удалить другой вопрос.   -  person p.s.w.g    schedule 18.07.2013


Ответы (1)


Используйте делегата Action для выполнения метода, возвращающего void:

public async Task MyAsyncMethod(Action V)
{
    await Task.Delay(2000);
    V();
}

Или Func<T> для метода, который возвращает некоторое значение

public async Task MyAsyncMethod(Func<int> V)
{
    await Task.Delay(2000);
    int result = V();
}
person p.s.w.g    schedule 18.07.2013
comment
Еще один вопрос: как заставить общедоступную асинхронную задачу возвращать целое число? - person Daniel Jones; 18.07.2013
comment
@DanielJones Как вернуть значение из задачи - person p.s.w.g; 18.07.2013
comment
Мне нужно, чтобы Task‹int› task3 = Task‹int›.Factory.StartNew(() =› работал как асинхронный - person Daniel Jones; 18.07.2013
comment
@DanielJones Ссылка, которую я предоставил, включает очень хорошее и четкое описание того, как именно это сделать. Попробуйте, посмотрите, сможете ли вы понять это самостоятельно, и если у вас все еще есть проблемы, вы можете задать это как новый вопрос здесь, на SO. - person p.s.w.g; 18.07.2013
comment
Не волнуйтесь, я уже понял это для себя, спасибо за помощь! - person Daniel Jones; 18.07.2013
comment
@DanielJones Нет проблем. Удачного кодирования - person p.s.w.g; 18.07.2013