Какие варианты возвращаемых значений может иметь асинхронный метод, помеченный ключевым словом async?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Асинхронный метод async в C# обычно возвращает Task, Task<T> или void. В современных версиях также возможны ValueTask и ValueTask<T>, но это уже более частный случай. Чаще всего на практике ожидают увидеть именно Task и Task<T>.
Определение:
async помечает метод как асинхронный, то есть позволяющий использовать await внутри тела. Тип возвращаемого значения определяет, можно ли дождаться завершения метода и получить результат.
Если метод не возвращает значение, обычно используется Task. Если метод возвращает результат, используется Task<T>. void для async-методов применяется редко и в основном только для обработчиков событий, потому что такой метод нельзя нормально ждать и перехватывать его исключения сложнее.
Пример использования:
public async Task LoadDataAsync()
{
await Task.Delay(1000);
}
public async Task<int> GetCountAsync()
{
await Task.Delay(1000);
return 42;
}
public async void Button_Click(object sender, EventArgs e)
{
await Task.Delay(1000);
}
Пояснение кода:
LoadDataAsyncвозвращаетTask, потому что результат не нужен, важен сам факт завершения операции.GetCountAsyncвозвращаетTask<int>, потому что после завершения нужно получитьint.Button_Clickвозвращаетvoid, потому что это обработчик события; в обычном прикладном кодеasync voidлучше избегать.await Task.Delay(1000)имитирует асинхронную операцию без блокировки потока.
Ключевые моменты:
- Основные варианты:
Task,Task<T>,void. Task— если метод ничего не возвращает, но его нужноawait-ить.Task<T>— если метод возвращает результат после завершения.async voidдопустим в основном для обработчиков событий.- В современных версиях C# также применяются
ValueTaskиValueTask<T>для оптимизации в отдельных сценариях. - Исключения из
async Taskиasync Task<T>можно нормально наблюдать черезawait, а уasync voidэто существенно неудобнее.