3

ThreadLocal在 ASP.NET 中使用了一个变量HttpHandler。我认为它会导致每个请求产生一个新变量。

我的应用程序中有一些奇怪的行为。何时ThreadLocal在 ASP.NET 页面中创建和处置变量?

如果 ASP.NET 稍后将同一线程用于另一个请求,会发生什么情况?它是否会产生一个新ThreadLocal变量或将使用先前创建的值(与另一个请求一起使用)?

如果ThreadLocal在实际释放线程时释放了变量,那么我的假设在 ASP.NET 中失败(因为线程返回池并且每个请求都不是唯一的)

4

2 回答 2

4

ASP.NET 可以并且将在请求之间重用线程——事实上,如果内存提供服务,它会为每个请求使用来自普通 .NET 线程池的线程。您最好使用会话状态。

于 2011-05-07T02:15:22.473 回答
0

试试这个:

public class WebRequestLocal<T>
{
    private readonly Func<T> _getter;
    private readonly object _id = new object();

    public WebRequestLocal(Func<T> getter)
    {
        _getter = getter;
    }


    public T Value
    {
        get
        {
            HttpContext httpContext = HttpContext.Current;
            if(httpContext == null)
                throw new Exception("HttpContext unavailable.");

            if (httpContext.Items.Contains(_id))
                return (T)httpContext.Items[_id];


            return (T)(httpContext.Items[_id] = _getter());
        }
    }
}
于 2017-11-09T01:21:38.747 回答