21

静的クラス内に次の静的メソッドがあります。私の質問は、静的メソッド内でHttpContext.Current.Responseを使用しても安全ですか?スレッドセーフであり、呼び出し元のスレッドにのみ関連付けられていることを100%確認したいと思います。誰かが答えを知っていますか?

    public static void SetCookie(string cookieName, string cookieVal, System.TimeSpan ts)
    {
        try
        {
            HttpCookie cookie = 
                new HttpCookie(CookiePrefix + cookieName) 
                    {Value = cookieVal, Expires = DateTime.Now.Add(ts)};
            HttpContext.Current.Response.Cookies.Add(cookie);
        }
        catch (Exception)
        {
            return;
        }
    }
4

3 に答える 3

34

はい、かなり安全です。HttContext.Currentは、実行中のスレッドから現在のHttpContextを取得します。

これは一般的な手法であり、「トランプデータ」のようにコンテキストオブジェクトを渡す必要がありません。

于 2009-11-13T09:42:21.713 に答える
14

HTTPContext.Currentは静的であるため、静的メソッドから呼び出しているという事実は関係ありません。関連するのは、HTTPContext.Currentが、現在のスレッドのHTTPコンテキスト(存在する場合)を返すように実装されていることです。

于 2009-11-13T09:40:35.590 に答える
7

スレッドセーフとはどういう意味かは明確ではありません。はい、現在のスレッドに関連付けられているオブジェクトをHttpContext.Current返します。HttpContext現在リクエストを処理しているスレッド以外のスレッドで関数を呼び出すと(たとえば、非同期関数呼び出しで)、目的のオブジェクトにアクセスできないことに注意してHttpContextください。

もう1つのアプローチは、コンテキストオブジェクトを引数として関数に渡すことです。

于 2009-11-13T09:41:56.717 に答える