Non capisco esattamente cosa stia succedendo dietro le quinte quando ho un'azione asincrona su un controller MVC, specialmente quando si tratta di operazioni di I/O. Diciamo che ho un azione di caricamento:Comprensione profonda di async/await su ASP.NET MVC
public async Task<ActionResult> Upload (HttpPostedFileBase file) {
....
await ReadFile(file);
...
}
Da quello che so questi sono i passaggi fondamentali che accadono:
un nuovo thread è sbirciò da threadpool e assegnata la gestione incomming richiesta.
Quando l'attesa viene colpita, se la chiamata è un'operazione di I/O, il thread originale torna in pool e il controllo viene trasferito a un cosiddetto IOCP (porta di completamento dell'uscita di input). Quello che non capisco è perché la richiesta è ancora viva e aspetta una risposta perché alla fine il client chiamante aspetterà che la nostra richiesta venga completata.
La mia domanda è: chi/quando/come si verifica questa attesa per il blocco completo?
Nota: ho visto il post del blog There Is No Thread e ha senso per le applicazioni GUI, ma per questo scenario lato server non capisco. Veramente.
Che cosa stai cercando esattamente: spiegazione di come regolare [IHttpAsyncHandler] (https://msdn.microsoft.com/en-us/library/system.web.ihttpasynchandler (v = vs.110) .aspx) si integra con 'async' /' await' o perché 'IHttpAsyncHandler' funziona o qualcos'altro? –
Ho difficoltà a cercare di capire quale parte non capisci, puoi chiarire? Non vi è alcun motivo per cui la richiesta di morire se il thread di gestione viene reinserito nel pool: verrà solo ripristinato in un secondo momento, eventualmente su un altro thread. Il controllo BTW non è * trasferito * su un IOCP. –