2
次のコードに問題があります。私は次のコードを持っています。HttpRuntime.Cacheの有効期限はありませんか?
if (HttpRuntime.Cache[cacheKey] == null)
{
AddTask(cacheKey, JsonConvert.SerializeObject(result), 60 * 30);
}
r = JsonConvert.DeserializeObject<Result>(HttpRuntime.Cache[cacheKey].ToString());
HttpRuntime.Cache[cacheKey] = JsonConvert.SerializeObject(r);
private static void AddTask(string key, string value, int seconds)
{
HttpRuntime.Cache.Insert(key, value, null,
DateTime.Now.AddSeconds(10), Cache.NoSlidingExpiration,
CacheItemPriority.NotRemovable, new CacheItemRemovedCallback(CacheItemRemoved));
}
public static void CacheItemRemoved(string k, object v, CacheItemRemovedReason r)
{
}
私がやっていることは、単にキャッシュを追加して(存在すれば)更新することです。 10秒後に何かを点検したい。しかし、私のCacheItemRemovedコールバックは決して呼び出されませんでした。
アイテムが削除されるという保証はありません。これはキャッシュのポイントではありません。ここで何をしようとしていますか? – Luaan
キャッシュ内の項目を追加および更新します。いくつかの間隔の後に私はキャッシュを削除したいとコールバックですべてのキャッシュデータを保存します。 – SAL
さて、「キャッシュ」はそのためには機能しません。 1つは、アイテムが削除されたことを保証するものではなく、2つの理由でアイテム*が削除されたときにコールバックが呼び出され、実行が終了することを保証するものではありません。これはキャッシュであり、書き込みバッファではありません。書き込みバッファが必要な場合は、独自のバッファを作成する必要があります。 – Luaan