Вызов Wait()
перед доступом к Result
не требуется.
Проверка ссылочного кода Task
и Task<TResult>
показывает, чтои метод void Wait()
, и метод получения свойства Result
в конечном итоге попадают в метод, который выполняет фактическое ожидание:
internal bool InternalWait(int millisecondsTimeout, CancellationToken cancellationToken)
Оба пути кода отправляют идентичные значения параметров в InternalWait
- бесконечномаркер ожидания и отмены по умолчанию.
Если вы вызовете Wait
перед доступом к Result
, путь к коду внутри получателя, ведущий к InternalWait
, будет пропущен, поскольку известно, что задача выполнена.Тем не менее, чистый результат останется неизменным в обоих случаях.
Примечание: В этом ответе намеренно игнорируются возможности оптимизации фрагмента кода.