Когда выбирать ValueTask вместо Task, и какие у него ловушки?
Берите ValueTask, если бóльшая часть вызовов завершается синхронно (кэш, короткие I/O) и вы реально снижаете аллокации; иначе Task проще и часто не медленнее.
Не публикуйте ValueTask без нужды в широких API: потребители могут ждать результат несколько раз или кешировать его — для ValueTask это некорректно (повторное ожидание допустимо только после преобразования в Task).
Если нужно ждать более одного раза или хранить результат, конвертируйте один раз в Task через AsTask() и работайте с ним.
Это структура: может содержать либо значение, либо ссылку на источник (IValueTaskSource). Ошибки владения/повторного ожидания ведут к Undefined Behavior.
В композиции (WhenAll/WhenAny, LINQ over Tasks, сторонние библиотеки) часто всё равно произойдёт аллокация или боксинг — выигрыш исчезает.
Исключения/отмена ведут себя как у Task, но повторное ожидание после ошибки у ValueTask недопустимо.
Типичный кейс: горячие пути ASP.NET Core/парсеры/кэш — измерения показывают пользу; для остального оставляйте Task ради простоты и устойчивости.
Когда выбирать ValueTask вместо Task, и какие у него ловушки?
Берите ValueTask, если бóльшая часть вызовов завершается синхронно (кэш, короткие I/O) и вы реально снижаете аллокации; иначе Task проще и часто не медленнее.
Не публикуйте ValueTask без нужды в широких API: потребители могут ждать результат несколько раз или кешировать его — для ValueTask это некорректно (повторное ожидание допустимо только после преобразования в Task).
Если нужно ждать более одного раза или хранить результат, конвертируйте один раз в Task через AsTask() и работайте с ним.
Это структура: может содержать либо значение, либо ссылку на источник (IValueTaskSource). Ошибки владения/повторного ожидания ведут к Undefined Behavior.
В композиции (WhenAll/WhenAny, LINQ over Tasks, сторонние библиотеки) часто всё равно произойдёт аллокация или боксинг — выигрыш исчезает.
Исключения/отмена ведут себя как у Task, но повторное ожидание после ошибки у ValueTask недопустимо.
Типичный кейс: горячие пути ASP.NET Core/парсеры/кэш — измерения показывают пользу; для остального оставляйте Task ради простоты и устойчивости.
The SUCK Channel on Telegram, with a message saying some content has been removed by the police. Photo: Telegram screenshot. Telegram has announced a number of measures aiming to tackle the spread of disinformation through its platform in Brazil. These features are part of an agreement between the platform and the country's authorities ahead of the elections in October. With the administration mulling over limiting access to doxxing groups, a prominent Telegram doxxing group apparently went on a "revenge spree." The channel also called on people to turn out for illegal assemblies and listed the things that participants should bring along with them, showing prior planning was in the works for riots. The messages also incited people to hurl toxic gas bombs at police and MTR stations, he added. To delete a channel with over 1,000 subscribers, you need to contact user support
from us