I have a static class with a static get property, and in this property, I do this:
// property body
{
// HttpContext.Current is NOT null
...
Par
HttpContext.Current is null because it's running in "non-web threads". If you forked some code using new Thread(...)
it would be exactly the same. The TPL somewhat hides this, but you still need to realize that each iteration in your Parallel.ForEach
can potentially run in a different thread, and treat it accordingly.
In particular, if you want to use some class or method out of the web request (and Parallel.ForEach is such an usage) you just can't use HttpContext.Current. A workaround is to explicitly pass the HttpContext (or HttpContextBase for improved testability) in the constructor (or as a method parameter)
In a nutshell: you need to break out of using HttpContext.Current statically.