Да, это ожидаемо. Это почему существует концепция Task
и c. Если бы можно было делать то, что вы хотите: , им не нужно было бы - мы могли бы просто взмахнуть палочкой, и все было бы асинхронно c. Вся суть ожидаемых типов заключается в том, что освобождение вызывающего потока при разрешении последующего продолжения является жестким и требует координации и участия вызывающего кода; и от того, что это когда-либо называется; et c - полностью вверх по стеку до того, что запускает потоки. Ваш код callingMethhod
синхронный: он может делать только несколько вещей:
- он может работать до завершения - это означает: ему придется заблокировать
- , он может бросить исключение
В результате этого async
/ await
является заразным; все, что касается ожидаемых вроде как, должно также быть ожидаемым , что означает: вы обычно вызываете myMethodAsync
только из callingMethhod
, который вернул [Value]Task[<T>]
, и который предположительно async
с await
(хотя в показанном примере эти биты не являются обязательными).