ASP.NET Core の IMemoryCache からすべてのオブジェクトを削除 (リセット) する方法 質問する

ASP.NET Core の IMemoryCache からすべてのオブジェクトを削除 (リセット) する方法 質問する

キーによって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();
    }
}

おすすめ記事