TaskCompletionSource - Пытаются понять асинхронную работу без потоков

Я пытаюсь понять цельTaskCompletionSource и его отношение к асинхронной / поточной работе. Я думаю, что у меня есть общая идея, но я хочу убедиться, что мое понимание верно.

Сначала я начал изучать Task Parallel Library (TPL), чтобы выяснить, существует ли хороший способ создать свою собственную работу без потоков или асинхронно (скажем, вы пытаетесь улучшить масштабируемость своего сайта ASP.NET), а также понять TPL. похоже это будет очень важно в будущем (async/await). Что привело меня кTaskCompletionSource.

Насколько я понимаю, это выглядит как добавлениеTaskCompletionSource для одного из ваших классов не так много, как для асинхронного кодирования; если вы все еще выполняете код синхронизации, то вызов вашего кода будет заблокирован. Я думаю, что это даже верно для API-интерфейсов Microsoft. Например, скажем вDownloadStringTaskAsync отWebClient класс, любой код установки / синхронизации, который они делают изначально, заблокирует. Код, который вы выполняете, должен запускаться в каком-то потоке, либо в текущем, либо в новом.

Итак, вы используетеTaskCompletionSource в вашем собственном коде, когда вы звоните другимasync звонки от Microsoft, поэтому клиенту ваших классов не нужно создавать новый поток, чтобы ваш класс не блокировался.

Не уверен, как Microsoft выполняет свои асинхронные API внутри. Например, есть новыйasync метод отSqlDataReader для .Net 4.5. Я знаю, что есть порты завершения ввода / вывода. Я думаю, что это абстракция более низкого уровня (C ++?), Которую, вероятно, большинство разработчиков на C # не будут использовать. Не уверен, что порты завершения ввода-вывода будут работать для базы данных или сетевых вызовов (HTTP) или если он используется только для файлового ввода-вывода.

Итак, вопрос в том, правильно ли я понимаю в своем понимании? Есть ли определенные вещи, которые я неправильно представил?

Ответы на вопрос(2)

Ваш ответ на вопрос