キーによってRemove
オブジェクトを削除する方法があります。 キャッシュ全体をリセットしてすべてのオブジェクトを削除する方法はありますか?IMemoryCache
Dispose
記載の方法を使用してMemoryCache をクリアするにはどうすればいいですか?動作しません:
ObjectDisposedException: Cannot access a disposed object.
Object name: 'Microsoft.Extensions.Caching.Memory.MemoryCache'.
ベストアンサー1
見るASP.NET Core のメモリ内キャッシュ、特にキャッシュの依存関係。
CancellationTokenSourceを使用すると、複数のキャッシュエントリをグループとして削除できます。
このコードは私にとってはうまくいきました:
public class CacheProvider
{
private static CancellationTokenSource _resetCacheToken = new CancellationTokenSource();
private readonly IMemoryCache _innerCache;
/* other methods and constructor removed for brevity */
public T Set<T>(object key, T value)
{
/* some other code removed for brevity */
var options = new MemoryCacheEntryOptions().SetPriority(CacheItemPriority.Normal).SetAbsoluteExpiration(typeExpiration);
options.AddExpirationToken(new CancellationChangeToken(_resetCacheToken.Token));
_innerCache.Set(CreateKey(type, key), value, options);
return value;
}
public void Reset()
{
if (_resetCacheToken != null && !_resetCacheToken.IsCancellationRequested && _resetCacheToken.Token.CanBeCanceled)
{
_resetCacheToken.Cancel();
_resetCacheToken.Dispose();
}
_resetCacheToken = new CancellationTokenSource();
}
}