Skip to content

1.6.0

Choose a tag to compare

@cretz cretz released this 21 Apr 13:52
· 56 commits to main since this release
464b895

Get from NuGet and read the README

Highlights

New Event Loop Algorithm

A significant change was made to the event loop internals to allow for proper expectations on tasks and wait conditions. Specifically for most users, the biggest difference is that only one WaitConditionAsync will be resolved at a time before the tasks continue. So now if you have multiple coroutines/tasks with:

await Workflow.WaitConditionAsync(() => !locked);
locked = true;

That kind of a mutex now works, whereas before it would wake up all wait conditions at once. So before you could not guarantee that the wait condition was satisfied on the line after the wait condition, but now you can.

This change can cause backwards incompatible history, so we took care to make sure past workflows still use the previous algorithm. See #432 for more details.

💥 BREAKING CHANGE - Removed assumed use-worker-versioning in DI when build ID present

This is a breaking change only for those that used non-GA versioning and use build IDs specifically in their AddHostedTemporalWorker calls. We previously assumed that the simple presence of a build ID was enough to opt-in to this non-GA versioning (which is being replaced with a newer form of versioning anyways). We now no longer assume this, so for any users relying on this unstable form of versioning, UseWorkerVersioning worker option will have to be explicitly set to true instead of relying on it being done implicitly when build ID is present.

This only affects a very small subset of users trying out a pre-release form of versioning. See #432 for more details.

MUSL-based Builds Supported

We now publish Linux-musl builds for x64 to NuGet which means users can use Alpine-based .NET docker images.

Serialization Context Available For Converters/Codecs

Payload converters, failure converters, and payload codecs can now implement IWithSerializationContext that will have WithSerializationContext called when needing to do context-specific conversion for workflows or activities. A common use case for this is to allow codecs to have different encryption keys per workflow ID or namespace. See #446 for more details.

Specific Changes

2025-02-28 - bbbfad1 - Add advanced signal-handling tests (#418)
2025-03-17 - 612fe2f - Use RawValue for built-in query response (#424)
2025-03-17 - 7829fd3 - Allow unaltered payload response from codec (#425)
2025-03-18 - 8631656 - add protected constructors for metric instrumentation in Temporalio.Common namespace (#431)
2025-03-18 - fc0fd7b - change readme activity examples from scheduletoclose to starttoclose (#433)
2025-03-19 - bac42d3 - Apply modern event loop algorithm with new SDK flag (#432)
2025-04-09 - 5cb605e - Add Workflow.Unsafe.WithTracingEventListenerDisabled (#443)
2025-04-09 - 9ac9d69 - Increase visibility on some client constructs and minor docs updates (#434)
2025-04-10 - 0ef89ac - Add ActivityDefinition.CreateWithoutAttribute overload (#451)
2025-04-10 - 409e53f - Remove assumed use-worker-versioning in DI when build ID present (#452)
2025-04-10 - 6c2a78f - Provide MUSL-based build (#447)
2025-04-10 - fc4ea01 - Allow absent payloads on some responses (#449)
2025-04-15 - 6dbf752 - Serialization context for converters and codecs (#446)
2025-04-16 - 6a0eb69 - Update Core (with changes needed) and update version to 1.6.0 (#453)
2025-04-17 - 464b895 - Custom histogram metric buckets (#456)
2025-04-17 - 4fed10a - Expose root execution (#454)
2025-04-17 - 5531bfe - proposed readme nits (#455)