Я читал об асинхронном/ожидании и когда Task.Yield мог быть полезен и наткнулся на этот пост. У меня возник вопрос относительно ниже этого сообщения:
Когда вы используете async/wait, нет гарантии, что метод, который вы используете вызов, когда вы ожидаете
FooAsync(), будет выполняться асинхронно. Внутренняя реализация может свободно возвращаться, используя полностью синхронный путь.
Это немного непонятно для меня, вероятно, потому, что определение асинхронности в моей голове не выстраивается.
На мой взгляд, поскольку в основном я использую UI dev, асинхронный код - это код, который не запускается в потоке пользовательского интерфейса, а в другом потоке. Я предполагаю, что в тексте, который я цитировал, метод не является действительно асинхронным, если он блокирует любой поток (даже если это поток потока потока, например).
Вопрос:
Если у меня длинная работа, связанная с ЦП (скажем, она делает много жесткой математики), то выполнение этой задачи асинхронно должно блокировать некоторые потоки правильно? Что-то должно на самом деле делать математику. Если я жду этого, то поток будет заблокирован.
Что такое пример асинхронного метода и как они будут работать? Являются ли они ограниченными для операций ввода-вывода, которые используют некоторые аппаратные возможности, поэтому нить никогда не блокируется?
