Будет ли это:
var employeesFacts = await _cacheService.GetEmployeesFacts();
Обычно да.
или
var employeesFacts = _cacheService.GetEmployeesFacts().Result;
Немного смущен здесь.
НИКОГДА.
Давайте не будем вас обманывать.
Первое: задача значения - это просто задача, которая копируется по значению, а не по ссылке. Не используйте ValueTask, если вы не знаете разницу и у вас есть причина для этого, основанная на эмпирическом исследовании производительности, которое указывает на то, что регулярные задачи являются значительным фактором давления при сборе.Просто используйте обычные задачи почти все время.
Вы не измените, как используете задачу, в зависимости от того, была ли она скопирована по значению или по ссылке.Независимо от того, ожидаете ли вы задачи.
Вы никогда не используете .Result
для задачи, независимо от того, является ли она значением или ссылкой.Зачем?Потому что предположим, что задача не завершена: тогда Result
будет синхронно ждать ее завершения. Предположим, что последний шаг рабочего процесса находится в очереди текущего потока, ожидающего отправки .Вы просто положите эту нить спать!Теперь нить спит, ожидая, что сама разбудит ее, и поэтому она будет спать вечно.Никогда не используйте .Result
.Почти всегда это неправильно.