<p>What are differences between CallContext and ThreadStatic?</p>

<p>I've understood that in an ASP.NET environment data stored in CallContext could be persisted throughout the request until it ends while ThreadStatic may or may not work since the request may switch threads. I've also learned that the HttpContext is internally stored using the CallContext.</p>

<p>In a regular application they both seem to persist throughout the same thread call. When isn't this the case? </p>

<hr>

<p><strong>Edit:</strong> In the comments I learned that the call context is an abstraction over a thread static store. The ASP.NET framework explicitly moves the data from one thread to the next that is to handle one request. Other framework that wants to provide thread agility could do the same to for contextual storage.</p>

Very often a request will use the same thread throughout, but it certainly won't always be the case - ASP.NET exhibits
thread agility
. There's an old
in-depth blog article about the matter
from 2005, but as of .NET 4.5
things are rather better
.