Akka.NET v1.5.57
1.5.57 December 11th, 2025
Akka.NET v1.5.57 is a minor release containing significant new features for Akka.Persistence and structured/semantic logging.
Akka.Persistence Completion Callbacks and Async Handler Support
- Persistence completion callbacks via Defer - simplified alternative - This release adds completion callback and async handler support to
Persist,PersistAsync,PersistAll, andPersistAllAsyncmethods in Akka.Persistence. Key improvements include:- Async Handler Support: All persist methods now support
Func<TEvent, Task>handlers for async event processing - Completion Callbacks:
PersistAllandPersistAllAsyncnow accept optional completion callbacks (both syncActionand asyncFunc<Task>) that execute after all events are persisted and handled - Ordering Guarantees: Completion callbacks use
Defer/DeferAsyncinternally to maintain strict ordering guarantees - Zero Breaking Changes: All new APIs are additive overloads
- Async Handler Support: All persist methods now support
Persistence Code Examples:
// Async handler support - process events asynchronously
Persist(new OrderPlaced(orderId), async evt =>
{
await _orderService.ProcessOrderAsync(evt);
});
// PersistAll with completion callback - know when all events are done
PersistAll(orderEvents, evt =>
{
_state.Apply(evt);
}, onComplete: () =>
{
// All events persisted and handlers executed
_logger.Info("Order batch completed");
Sender.Tell(new BatchComplete());
});
// PersistAll with async handler AND async completion callback
PersistAll(events,
handler: async evt => await ProcessEventAsync(evt),
onCompleteAsync: async () =>
{
await NotifyCompletionAsync();
Sender.Tell(Done.Instance);
});
// PersistAllAsync with completion - allows commands between handlers
PersistAllAsync(largeEventBatch,
handler: evt => _state.Apply(evt),
onComplete: () => Sender.Tell(new BatchProcessed()));
The implementation maintains Akka.Persistence's strict ordering guarantees by using Defer/DeferAsync for completion callbacks, ensuring they execute in order even when called with empty event collections. The new async handler invocations (IAsyncHandlerInvocation) are processed via RunTask to preserve the actor's single-threaded execution model.
Native Semantic Logging Support
- Add native semantic logging support with property extraction - Fixes issue #7932. This release adds comprehensive structured logging support to Akka.NET with both positional (
{0}) and named ({PropertyName}) message template parsing, enabling seamless integration with modern logging frameworks like Serilog, NLog, and Microsoft.Extensions.Logging. Key capabilities include:- New
LogMessage.PropertyNamesandGetProperties()APIs for property extraction SemanticLogMessageFormatteras the new default formatter- Performance optimized with 75% allocation reduction compared to the previous implementation
- Zero new dependencies and fully backward compatible
- EventFilter support for semantic templates in unit tests
- New
1 contributor since release 1.5.56
| COMMITS | LOC+ | LOC- | AUTHOR | |---------|------|------|----------------| | 2 | 3703 | 81 | Aaron Stannard |
To see the full set of changes in Akka.NET v1.5.57, click here:
Changes:
- 5a532c8d2ccbcf18b16a239cd65fce2d08e41630 Update RELEASE_NOTES.md for 1.5.57 release (#7961)
- 9d85bb8a3c60c59ceeef64e65e6b2fc604a02076 Update RELEASE_NOTES.md for 1.5.57-beta2 release (#7959)
- 43838bf69297de93113feb5a3aa7beb3b3210b9b feat(persistence): completion callbacks via Defer - simplified alternative to #7937 (#7954) (#7957)
- e94b4ad80895edcfa84d8cca3343c776efe02fd3 Remove Cmd demand from Windows release pipeline
- 5e4e5de6c56e339099a224629537ad01822d2f47 Update RELEASE_NOTES.md for 1.5.57-beta1 release (#7956)
- 0f239487e8924542dc92ad2725f9981a5f7cfe70 feat: Add native semantic logging support with property extraction (#7933) (#7955) [ #7932 ]
This list of changes was auto generated.