Потому что Task<TResult>
- это «будущее» - значение, которое появится позже.string[]
- это то, что у вас есть прямо сейчас.
Аналогично, Task
- это операция, которая завершится (успешно или с ошибкой) когда-нибудь в будущем.
void
это что-то особенное;она представляет операцию верхнего уровня в Async CTP.
Если вам интересно, почему Task
не выводится автоматически, это было рассмотрено, но отклонено командой Async CTP.Их обоснование здесь , и эта тема также охватывает это.