Akka.net v1.5.68 Release Notes

Release Date: 2026-05-17 // about 1 month ago
  • 1.5.68 May 17th, 2026

    ๐Ÿš€ Akka.NET v1.5.68 is a maintenance release with bug fixes for Akka.IO TCP connection handling, Akka.Streams stream materialized task faults, and Akka.TestKit xUnit 3 parallel context management.

    ๐Ÿ›  Akka.IO Bug Fixes

    • โฑ Fix: report Tcp.CommandFailed when a scheduled connect retry throws - Fixes #8195: On Linux, a dropped TCP connection could permanently stall the user actor โ€” it never received Tcp.Connected or Tcp.CommandFailed because a PlatformNotSupportedException thrown during a scheduled connect retry was swallowed by the HashedWheelTimerScheduler. The retry is now scheduled as a RetryConnect self-message via IWithTimers, ensuring any exception is surfaced to the commander as Tcp.CommandFailed and the connection actor stops cleanly. The pending timer is also canceled automatically when the actor stops, removing a latent use-after-dispose bug.

    ๐Ÿ›  Akka.Streams Bug Fixes

    • ๐Ÿ›  Fix: observe discarded stream task faults - Fixes #8209 and #8210: IgnoreSink, QueueSource, and LazySink now observe their internal materialized Task faults, preventing them from surfacing later as UnobservedTaskException events on the thread pool.

    โœ… Akka.TestKit Bug Fixes

    • โฑ Fix: wrap outer SynchronizationContext in ActorCellKeepingSynchronizationContext - ActorCellKeepingSynchronizationContext now accepts an optional inner SynchronizationContext and delegates scheduling to it while wrapping callbacks with the cell-pinning window. This prevents test hangs in downstream consumers such as Akka.Hosting.TestKit whose async IHost lifecycle depends on xUnit v3's MaxConcurrencySyncContext scheduling.

    ๐Ÿš€ 1 contributor since release 1.5.67

    COMMITS LOC+ LOC- AUTHOR
    3 476 119 Aaron Stannard

    ๐Ÿ‘€ To see the full set of changes in Akka.NET v1.5.68, click here.

    ๐Ÿ”„ Changes:

    ๐Ÿ— This list of changes was auto generated.


Previous changes from v1.5.67

  • 1.5.67 April 25th, 2026

    ๐Ÿš‘ Akka.NET v1.5.67 is a hotfix release that reverts a breaking change to the persistence plugin contract introduced in v1.5.66.

    โช Akka.Persistence: Revert async WriteMessagesAsync/SaveAsync dispatch (#8163)

    ๐Ÿ”€ v1.5.66 added Task.Yield() inside AsyncWriteJournal.ExecuteBatch and SnapshotStore to move persistence plugin WriteMessagesAsync/SaveAsync calls off the actor thread. While this improved throughput in benchmarks, it silently broke the implicit contract that persistence plugins rely on โ€” that the synchronous preamble of these methods executes in actor context.

    ๐Ÿ”Œ This caused failures in plugins that:

    • ๐Ÿ‘ Access Self inside WriteMessagesAsync (e.g. Akka.Persistence.Sql, Akka.Persistence.EventStore) โ€” throws NotSupportedException off the actor thread
    • ๐Ÿ‘‰ Use non-thread-safe collections for write tracking (e.g. Dictionary<string, Task>) โ€” concurrent access from actor thread and thread pool causes InvalidOperationException
    • Send messages to subscribers after writes complete (e.g. Akka.Persistence.Redis) โ€” accesses shared actor state off-thread

    ๐Ÿš€ This release removes the Task.Yield() calls and restores the original dispatch behavior. A future version may reintroduce this optimization with a more targeted approach that preserves the plugin threading contract.

    If you are on v1.5.66 , upgrade to v1.5.67 immediately if you use any third-party persistence plugin.

    COMMITS LOC+ LOC- AUTHOR
    1 3 17 Aaron Stannard

    ๐Ÿ”„ Changes:

    • ๐Ÿš€ 2f057e4 Update RELEASE_NOTES.md for 1.5.67 release
    • โช 46371dd revert(persistence): remove Task.Yield() from AsyncWriteJournal and SnapshotStore (#8163)

    ๐Ÿ— This list of changes was auto generated.