Download Latest Version v2.6.0 source code.tar.gz (6.4 MB)
Email in envelope

Get an email when there's a new version of FusionCache

Home / v2.6.0
Name Modified Size InfoDownloads / Week
Parent folder
README.md 2026-03-14 3.7 kB
v2.6.0 source code.tar.gz 2026-03-14 6.4 MB
v2.6.0 source code.zip 2026-03-14 6.8 MB
Totals: 3 Items   13.2 MB 0

🏷️ Configurable cleanup behavior for RemoveByTag()

Normally, when calling RemoveByTag("my-tag"), the entries with such a tag will be gradually expired on a subsequent access.

Community member @charlesvigneault asked for the ability to instead properly remove them.

So I added a new option to allow configuring this behavior:

:::csharp
services.AddFusionCache()
    .WithOptions(options =>
    {
        options.RemoveByTagBehavior = RemoveByTagBehavior.Remove;
    });

See here for the original issue.

Ⓜ️ Add support for RemoveByTag("*") in HybridCache adapter

After the initial release of HybridCache in 2025, the team added support for a special case: using RemoveByTag("*") to clear the entire cache.

I didn't notice untile recently, and thanks to community user @vrbyjimmy I did that. Or, to better say it, he did that! He acted so quickly that a PR immediately landed with the implementation, so thanks Jakub for that!

What happens underneath is that a RemoveByTag("*") call on the adapter is detected and re-routed to a Clear() call on the underlying FusionCache instance: very simple and elegant, and I like that a lot.

See here for the original issue.

🔒 Better Distributed Locker + Eager Refresh

Community user @jgshowpad noticed that when using the new distributed stampede protection introduced in v2.5.0 with Eager Refresh some errors were being logged.

That was caused by the Redis-based distributed locker not handling correctly a timeout of zero (which btw is a pretty common approach to basically check for a lock already being acquired by someone else, without having to wait).

This has now been fixed.

See here for the original issue.

⚡ Perf boost for GenerateOperationId()

Community user @Inok contributed with a nice set of low-level perf optimizations for the GenerateOperationId() internal method, which may be called quite a lot when doing observability (logging, OTEL, etc).

That's a very nice and welcome contribution, thanks Pavel!

See here for the original issue.

🔒 Add missing ext method for DI registration of

Community member @mumin-khan noticed that, after releasing distributed stampede support in v2.5.0, I missed the related ext method for the the DI registration.

So now I added it, and it's now possible to do this:

:::csharp
builder.Services.AddFusionCacheRedisDistributedLocker(options =>
  {
    options.Configuration = ... ;
  });

This has now been added, thanks Mumin!

See here for the original issue.

🐞 Fixed a couple of missing ConfigureAwait(false)

Community user @JerinMathewJose01 noticed that on the old .NET Framework 4.7.2 and 4.8, sometimes the factory may remain stuck without completing correctly.

That was caused by a couple of missing ConfigureAwait(false) when awaiting the factory execution.

This has now been fixed.

See here for the original issue.

📕 Docs

As always, I took some time to updated the docs with the latest stuff and make them overall better.

Source: README.md, updated 2026-03-14