TaskCompletionSource - Intentando entender el trabajo asíncrono sin hilos

Estoy tratando de entender el propósito deTaskCompletionSource y su relación con el trabajo asíncrono / sin hilos. Creo que tengo la idea general, pero quiero asegurarme de que mi comprensión es correcta.

Comencé a buscar en la biblioteca paralela de tareas (TPL) para averiguar si había una buena manera de crear su propio trabajo sin hilos / asíncrono (supongamos que está intentando mejorar la escalabilidad de su sitio ASP.NET) además de comprender el TPL. Parece que será muy importante en el futuro (async/await). Lo que me llevó a laTaskCompletionSource.

A mi entender, parece que añadirTaskCompletionSource a una de tus clases realmente no le sirve mucho para hacer que tu codificación sea asincrónica; Si aún está ejecutando el código de sincronización, la llamada a su código se bloqueará. Creo que esto es cierto incluso para las API de Microsoft. Por ejemplo, decir enDownloadStringTaskAsync fuera deWebClient Clase, cualquier código de configuración / sincronización que estén haciendo inicialmente se bloqueará. El código que estás ejecutando tiene que ejecutarse en algún hilo, ya sea el hilo actual o tendrás que escindir uno nuevo.

Entonces tu usasTaskCompletionSource en tu propio código cuando llamas a otroasync las llamadas de Microsoft para que el cliente de sus clases no tenga que crear un nuevo hilo para que su clase no se bloquee.

No estoy seguro de cómo hace Microsoft sus API asíncronas internamente. Por ejemplo, hay una nuevaasync método fuera de laSqlDataReader para .Net 4.5. Sé que hay puertos de finalización de IO. Creo que es una abstracción de nivel inferior (C ++?) Que probablemente la mayoría de los desarrolladores de C # no utilizarán. No estoy seguro de si los puertos de finalización de IO funcionarán para las llamadas de base de datos o de red (HTTP) o si se usan solo para IO de archivos.

Entonces la pregunta es, ¿estoy en lo correcto en mi entendimiento, correcto? ¿Hay ciertas cosas que he representado incorrectamente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta