Асинхронный универсальный делегат в C # 5.0 - PullRequest
2 голосов
/ 07 декабря 2011

При использовании итераторов возможен следующий общий делегат:

public delegate IEnumerable<TOut> MyDelegate<TIn>(TIn param1);

С новым async / await в C # 5.0 CTP я ожидаю, что смогу создать аналогичный делегат следующим образом:

public delegate async TOut MyDelegate<TIn>(TIn param1);

Я не могу найти спецификацию C # 5.0 или какую-либо помощь в этом отношении. Кто-нибудь знает, как это может быть написано или если это не может быть написано и почему?

Спасибо!

1 Ответ

5 голосов
/ 07 декабря 2011

async - это деталь реализации, а не спецификация интерфейса.async делегат не имеет смысла.

Любой метод, который возвращает «ожидаемый» (например, Task или Task<T>), может использоваться с await.

Таким образом, «асинхронный делегат» будет любым типом делегата, который возвращает Task или Task<T> (или любой другой вид ожидаемого).В вашем случае:

public delegate Task<TOut> MyDelegate<TIn, TOut>(TIn param1);
...