在一个静态方法线程安全的内部使用foreach而不是HttpContext.Current?

时间:2012-06-25 14:38:20

标签: c# asp.net static foreach thread-safety

记住这些

- HttpContext.Current

- Foreach

我无法绕过这个问题......这个代码在ASP.NET中是“线程安全的”吗?

public static bool IsCookieMissing()
{
    foreach (string cookieKey in HttpContext.Current.Request.Cookies.AllKeys)
    {
        if (cookieKey.EndsWith("cookie_name"))
        {
            return false;
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:4)

从技术上讲,是的,这段代码是线程安全的。

HttpContext.Current返回与当前请求关联的上下文。虽然IIS可能使用多个线程来处理给定的请求(thread agility),但它不会并行运行这些线程(它只会在异步I / O期间切换线程)。

因此,只有一个线程可以同时访问HttpContext.Current.Request.Cookies,并且您不需要在此处锁定。

答案 1 :(得分:2)

  

这段代码在ASP.NET中是“线程安全的”吗?

这取决于您的期望。它最有可能做你期望做的事情,因此它是“线程安全的”,除非你开始调用它自己的线程。 HttpContext.Current Current HttpContext,此时调用它。您不需要关注与this question相关联的问题 - 您没有使用任何闭包。