Sto cercando di capire lo scopo di TaskCompletionSource
e la sua relazione con il lavoro asincrono/senza thread. Penso di avere l'idea generale, ma voglio assicurarmi che la mia comprensione sia corretta.TaskCompletionSource - Tentativo di comprendere il lavoro asincrono senza thread
Ho iniziato a esaminare la libreria parallela task (TPL) per capire se c'era un buon modo per creare il proprio lavoro threadless/asincrono (ad esempio, stai cercando di migliorare la scalabilità del tuo sito ASP.NET) più la comprensione del TPL sembra essere molto importante in futuro (async
/await
). Il che mi ha portato allo TaskCompletionSource
.
Dal mio punto di vista sembra che l'aggiunta di TaskCompletionSource
a una delle tue classi non faccia molto in quanto rende la codifica asincrona; se stai ancora eseguendo il codice di sincronizzazione, la chiamata al tuo codice verrà bloccata. Penso che questo sia vero anche per le API di Microsoft. Ad esempio, ad esempio in DownloadStringTaskAsync
fuori dalla classe WebClient
, qualsiasi codice di impostazione/sincronizzazione che stanno inizialmente bloccerà. Il codice che stai eseguendo deve essere eseguito su alcuni thread, o il thread corrente o dovrai eseguirne uno nuovo.
Quindi si utilizza TaskCompletionSource
nel proprio codice quando si chiamano altre chiamate async
da Microsoft in modo che il client delle classi non debba creare un nuovo thread per la classe da non bloccare.
Non sono sicuro di come Microsoft esegua internamente le proprie API asincrone. Ad esempio, è disponibile un nuovo metodosu SqlDataReader
per .Net 4.5. So che ci sono IO Completion Ports. Penso che sia un'astrazione di livello inferiore (C++?) Che probabilmente la maggior parte degli sviluppatori di C# non useranno. Non sono sicuro se le porte di completamento dell'IO funzioneranno per il database o le chiamate di rete (HTTP) o se sono utilizzate solo per il file IO.
Quindi la domanda è, ho ragione nella mia comprensione corretta? Ci sono alcune cose che ho rappresentato in modo errato?
qual è la domanda? –
Se la mia comprensione è corretta ... non sono sicuro se lo sia o no – coding4fun