Questa supposizione è corretta?
No, questa ipotesi è not correct e c'è evidence per esso. L'unico meccanismo di archiviazione affidabile per richiesta in ASP.NET è HttpContext.Items
.
Non utilizzare mai i campi [ThreadStatic]
per memorizzare valori per richiesta in un'applicazione ASP.NET. Ad esempio, se si dispone di un controller asincrono, è possibile che il motore esegua una richiesta dal pool di thread per iniziare a servire la richiesta, quindi avviare un'operazione asincrona basata su un IOCP (Porta di completamento I/O) e infine disegnare un altro thread da la piscina per completare la richiesta. Quindi potresti avere 2 thread differenti che servono la stessa richiesta HTTP.
Assolutamente mai fare affidamento sul fatto che la richiesta HTTP sarà servita dallo stesso thread.
Questo potrebbe essere vero in alcuni casi per le richieste sincrone, ma ricorda che questo è solo un dettaglio di implementazione. Questo potrebbe cambiare senza preavviso da una versione di .NET a un'altra. Non devi mai fare affidamento su di esso e non utilizzare mai [ThreadStatic]
in ASP.NET. Questo potrebbe morderti molto male.
fonte
2012-01-01 22:49:42
C'è un modo semplice per riprodurre un simile comportamento? – Rookian
Wow Sono molto scioccato da questa risposta, credevo davvero che ASP.NET MVC stava elaborando ogni richiesta per thread. È ancora il caso di MVC 5? Come si spiega che è possibile impostare Thread.CurrentThread.CurrentCulture per l'applicazione multilingue, se le richieste non vengono elaborate per thread? – reddy
@reddy Per quanto ne so, ASP.NET si occupa di questi oggetti (HttpContext, CurrentCulture, ...) e li trasferisce da un thread all'altro. – Rookian