Вы задали два вопроса. Во-первых, вызывает ли доступ к Result
неявно синхронный Wait
? Да. Но более важный вопрос:
это безопасно делать?
Это небезопасно.
Очень легко попасть в ситуацию, когда задача, которую вы ожидаете синхронно, имеет запланированную работу , выполняемую в будущем до завершения в потоке , который вы только что перевели в режим ожидания . Теперь у нас есть ситуация, когда поток не проснется, пока поток sleep не выполнит какую-то работу, которую он никогда не сделает , потому что он спит .
Если вы уже знайте, что задача выполнена, тогда можно безопасно ожидать результата синхронно. Если вы этого не сделаете, тогда небезопасно синхронно ждать.
Теперь, вы можете сказать, предположим, что я знаю с помощью других средств, что безопасно синхронно ждать незавершенного задания , Тогда это безопасно ждать? Ну, , исходя из вопроса , да, но все равно может быть умным ждать. Помните, весь смысл асинхронности заключается в эффективном управлении ресурсами в мире с высокой задержкой . Если вы синхронно ожидаете завершения асинхронной задачи, вы заставляете работника спать, пока другой работник не завершит работу; спящий работник может делать работу! Весь смысл асинхронности в том, чтобы избегать ситуаций, когда рабочие go простаивают, поэтому не заставляйте их.
await
- это асинхронное ожидание, Это ожидание означает, что «дождитесь запуска остальной части текущего рабочего процесса до тех пор, пока эта задача не будет выполнена, но найдите что-то делать, пока вы ждете». Мы проделали большую работу, чтобы добавить его к языку, поэтому используйте его!