gautema / CQRSlite

A lightweight framework to help creating CQRS and Eventsourcing applications in C#
Other
1.1k stars 266 forks source link

Fixed concurrency errors in MemoryCache when using dotnetcore #104

Closed sebslsch closed 4 years ago

sebslsch commented 4 years ago

Fixed concurrency errors in MemoryCache (gautema/CQRSlite#101)

When using dotnetcore, adding a cache entry lead to InvalidOperationExceptions if a new registration callback was added concurrently.

The issue was caused by re-using a single MemoryCacheEntryOptions for multiple cache entries. This change resolves the issue by creating a new options instance for each cache entry.

This causes a change of behavior with the eviction callbacks. Previously, when using dotnetcore, all registered callbacks would be kept and invoked on a cache eviction. Now, only the last registered callback will be invoked. This behavior is consistent with the implementation for .NET Framework 4.5.2.

The default implementation of CacheRepository will register a new callback in the constructor of each instance. Because each callback modifies a static class field, it should not matter which callback is invoked.

It might, however, affect custom implementations.

gautema commented 4 years ago

Changes included in version 1..32.2