3

ASP.Netの背後でスレッドを実行しています。このスレッドでは、次のようにデータをキャッシュに入れます。

HttpRuntime.Cache.Insert("test", "test", null, DateTime.Today.AddHours(6), Cache.NoSlidingExpiration);   

もう一方のスレッド(Webページ)では、最初にキャッシュにデータが含まれているかどうかを確認してから、次のようにキャッシュからオブジェクトを取得しようとします。

 if (HttpRuntime.Cache.Count > 0) {
          var test = (string)HttpRuntime.Cache["test"];
 }

編集:キャッシュを実行しようとするとvar test = (string)HttpRuntime.Cache["test"];、キャッシュが空になります(または、オブジェクトが削除され、キャッシュ内の複数のオブジェクトをテストしていません)、var testさらにnullになります。もちろん、これはHttpRuntime.Cache.Countが0より大きい場合です。

ああ、それは例外も何も与えません

4

2 に答える 2

1

DateTime.Today.AddHours(6)が機能しないという、コードの矛盾の可能性があります。DateTime.Now.AddHours(6)を使用する必要があります

DateTime.Todayは、明らかにhttpruntimeキャッシュが使用できない12:00 AM後にコードを実行する場合、現在の開始日です。6:00 AM

于 2012-07-24T17:22:34.410 に答える
1

.NETのCacheオブジェクトはスレッドセーフであるため、スレッドごとにデータを取得する必要はありません。この記事を表示できます:http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

期間を調整します。DateTime.Now.AddHours(6)

于 2012-07-24T17:23:35.433 に答える