Мы уже разбирали ValueTask раньше, но сейчас напомним ключевые моменты. ValueTask это структура, которая может хранить либо готовый результат, либо Task, чтобы избежать аллокаций в простых случаях.
Особенности использования ValueTask:
• Повторное ожидание запрещено
Вызывать
await несколько раз для одного и того же ValueTask нельзя, так как это может привести к неожиданным результатам:ValueTask<int> task = GetValueAsync();
int value1 = await task;
int value2 = await task; // Ошибка
• Конвертация в
TaskEсли требуется передать
ValueTask в API, которое ожидает Task, можно вызвать метод .AsTask():Task<int> task = GetValueAsync().AsTask();
• Когда использовать ValueTask:
+ Операция часто завершается синхронно.
+ Создание объекта Task может быть слишком накладным.
+ Вы пишете библиотеку с высокой производительностью.
• Когда НЕ использовать ValueTask:
- Операция всегда асинхронна.
- Производительность не является критически важной.
- Приложение не оптимизировано под работу с
ValueTask.📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#лучшее_из_библиотеки_2025