Обязательно ли асинхронная операция в C# .NET создает блокирующий поток?

Это более общий вопрос, касающийся асинхронных шаблонов в C# .NET, описанных в MSDN здесь.

Когда требуется вызвать длительную синхронную операцию (например, WCF, запрос БД, ввод-вывод и т. д.), и я не хочу, чтобы поток блокировался (например, GUI поток), означает ли это, что где-то должен существовать другой поток, который выполняет блокировку?

Обязательно ли для выполнения синхронного вызова асинхронного требуется наличие потока для блокировки?

Итак, если я делаю 10 длительных асинхронных вызовов (которые на самом деле являются 10 синхронными вызовами), должно ли быть 10 потоков, выполняющих ожидание? Или есть механизм, предотвращающий блокировку 10 потоков?

В WCF, вы можете создать методы Begin и End для вызова WCF, чтобы сделать его асинхронным.Означает ли это, что когда я вызываю этот асинхронный метод, есть поток какой-то где, на клиенте или на сервере, меня ждут?

Я читал несколько статей о различных методах достижения асинхронности, но в этих статьях не объясняется, что делается под капотом.

Обновление

Я сделал свой вопрос более конкретным, так как меня больше интересует .NET. асинхронные шаблоны, описанные в MSDN.

Обновление 2

Я изменил вопрос, чтобы сделать его еще более конкретным, чтобы сделать синхронные вызовы асинхронными.

7
задан Mas 7 March 2012 в 08:29
поделиться