1

私は、一方の端で値を設定するためにThreadLocalを使用しており、もう一方の端で get メソッドを使用して値を取得しています。以下のコードは次のとおりです。

public class sample()
{    
        public  ThreadLocal<Object> tl1 = new ThreadLocal<Object>();
        protected void Page_Load(object sender, EventArgs e)
        {
            Thread thread = new Thread(new ThreadStart(Myfunction));
            setname("myval");   
            thread.Start();
        }

        public void setname(String name)
        {
            tl1.Value = name;
        }
        public  String getname()
        {
            return (String)tl1.Value;
        }

        public void Myfunction()
        {
            String value=getname();
        }
}

私はこれでsetnameメソッドで値を正しく設定しました..

しかし、別のスレッドでその値を取得しようとすると、セット値の名前がnullに変更されます。

ex: "myval" changed to "null"

どうすればこの問題を解決できますか

4

1 に答える 1

5

定義上、別のスレッドからアクセスすると、無関係な値、つまり 2 番目のスレッドに対して「ローカル」な値が取得されます。特にこれが実際にASP.NETのようなものである場合(これは、全期間にわたって同じスレッドを使用することを保証するものではありませ)、スレッドのコンテキストではなく、関連するもののコンテキストでデータを保存することをお勧めしますリクエストの)。たとえば、(ASP.NET に戻ると) 要求には、任意のキーと値のペアを格納できるコンテキストがあります。

于 2013-04-09T13:24:18.583 に答える