AspNetSynchronizationContext

Am I correct that It does guarantee your continuations will get the same HttpContext.Current as original callers? It does not guarantee the continuations will execute on the same thread as the callers?

Yes, HttpContext.Current is preserved, and yes, the continuations may execute on a different thread.

I mean principal/culture associated with the thread and thread local storage? That’s important because ASP.NET localization relies on thread’s culture and my application relies on .NET role security model (thread’s principal).

Ordinary thread-local storage is lost. You can mitigate this by using LogicalCallContext (which flows with ExecutionContext), but with async it’s easier to just reference the variables directly.

Principal is always preserved; to do otherwise would be a security risk. This flows with ExecutionContext.

I believe that culture flows with AspNetSynchronizationContext, but I haven’t tested this out on .NET 4.5’s new implementation.


You may find my MSDN article on SynchronizationContext helpful. It’s not official documentation (I don’t work for Microsoft), but at least it’s something. Note that the AspNetSynchronizationContext referenced in that article is now called LegacyAspNetSynchronizationContext in .NET 4.5.

Another great resource is Stephen Toub’s ExecutionContext vs. SynchronizationContext.

Leave a Comment