Estoy tratando de comprender el propósito de TaskCompletionSource
y su relación con el trabajo asincrónico/sin hilo. Creo que tengo una idea general, pero quiero asegurarme de que mi comprensión sea correcta.TaskCompletionSource - Intentando comprender el trabajo asincrónico sin hilo
Primero comencé a buscar en la Biblioteca de tareas paralelas (TPL) para descubrir si había una buena manera de crear su propio trabajo sin hilo/asincrónico (digamos que está intentando mejorar la escalabilidad de su sitio ASP.NET) más la comprensión del TPL parece que será muy importante en el futuro (async
/await
). Lo que me llevó al TaskCompletionSource
.
Desde mi punto de vista, parece que agregar TaskCompletionSource
a una de sus clases no hace mucho para hacer que su codificación sea asíncrona; si todavía 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, digamos en DownloadStringTaskAsync
fuera de la clase WebClient
, cualquier código de configuración/sincronización que estén haciendo inicialmente se bloqueará. El código que está ejecutando debe ejecutarse en algún subproceso, ya sea el actual o tendrá que derivar uno nuevo.
Así que usa TaskCompletionSource
en su propio código cuando llama a otras async
llamadas de Microsoft, por lo que el cliente de sus clases no tiene que crear un nuevo hilo para que su clase no se bloquee.
No estoy seguro de cómo Microsoft hace sus API asincrónicas internamente. Por ejemplo, hay un nuevo método async
fuera del SqlDataReader
para .Net 4.5. Sé que hay puertos de terminación IO. Creo que es una abstracción de nivel inferior (C++?) Que probablemente la mayoría de los desarrolladores de C# no usarán. No estoy seguro de si los puertos de terminación IO funcionarán para las llamadas de red o de base de datos (HTTP) o si solo se utilizan para el archivo IO.
Entonces la pregunta es, ¿estoy en lo correcto en mi entendimiento correcto? ¿Hay ciertas cosas que he representado incorrectamente?
¿cuál es la pregunta aquí? –
Si mi comprensión es correcta ... no estoy seguro si es o no – coding4fun