CallContext vs ThreadStatic

Quali sono le differenze tra CallContext e ThreadStatic?

Ho capito che in un ambiente ASP.NET i dati memorizzati in CallContext possono essere mantenuti per tutta la richiesta fino a quando non termina mentre ThreadStatic può o non può funzionare poiché la richiesta può cambiare thread. Ho anche imparato che HttpContext è memorizzato internamente usando CallContext.

In un’applicazione normale entrambi sembrano persistere durante lo stesso thread call. Quando non è questo il caso?


Modifica: nei commenti ho appreso che il contesto della chiamata è un’astrazione su un archivio statico di thread. Il framework ASP.NET sposta esplicitamente i dati da un thread all’altro per gestire una richiesta. Un altro framework che vuole fornire l’agilità del thread potrebbe fare lo stesso per l’archiviazione contestuale.

Molto spesso una richiesta utilizzerà lo stesso thread, ma certamente non sarà sempre così: ASP.NET mostra l’ agilità del thread . C’è una discussione davvero utile su questo nei forum Spring.NET . Questo si riferisce ad un articolo di approfondimento sul blog . Sospetto che entri in più dettagli di quello che avrai qui 🙂

Quali informazioni contrastanti hai visto, per interesse?

Gli articoli memorizzati come ThreadStatic sono disponibili per più di una richiesta. IIS riutilizza il thread dopo che una richiesta è stata completata per elaborare le richieste successive, può persino scambiare una richiesta da un thread a un altro durante l’elaborazione. ASP.Net cancella il CallContext dopo ogni richiesta.