C#: Adding context to Parallel.ForEach() in ASP.NET

后端 未结 4 1842
甜味超标
甜味超标 2020-12-16 00:42

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         


        
4条回答
  •  自闭症患者
    2020-12-16 01:18

    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.

提交回复
热议问题