Начиная с C# 7.0 асинхронные методы могут возвращать ValueTask. В объяснении говорится, что его следует использовать, когда у нас есть кэшированный результат или имитируется асинхронность с помощью синхронного кода. Однако я до сих пор не понимаю, в чем проблема с постоянным использованием ValueTask или, на самом деле, почему async/await не был построен с типом значения с самого начала. Когда ValueTask не сможет выполнить задание?
Подробнее здесь: https://stackoverflow.com/questions/430 ... taskt-in-c