Skip to content

1.3.0

Compare
Choose a tag to compare
@cretz cretz released this 14 Aug 13:35
· 27 commits to main since this release
973257a

Get from NuGet and read the README

Highlights

Warn on Unfinished Workflow Handlers

Previously if you had a signal handler or update handler that was not complete when the workflow was marked complete,
it'd silently be ignored/abandoned. Now you will get a warning. Users are encouraged to add
await Workflow.WaitConditionAsync(() => Workflow.AllHandlersFinished); to the bottom of their workflow to ensure they
have no outstanding handlers. If the previous no-warn situation is preferred, the signal/update attribute has a setting
to just abandon.

New Deterministic Async Helpers

While many Task based calls are safe for use in workflows (e.g. Task.WhenAll) there are some that are not (e.g.
Task.Run). So instead of only having some safe implementations of these and documenting others are safe, we wrapped
multiple in general. Some were added this release, so overall the set is:

  • Workflow.DelayAsync - Safe form of Task.Delay
  • Workflow.RunTaskAsync - Safe form of Task.Run or Task.Factory.StartNew
  • Workflow.WhenAllAsync - Safe form of Task.WhenAll
  • Workflow.WhenAnyAsync - Safe form of Task.WhenAny
  • Temporalio.Workflows.Mutex - Safe form of System.Threading.Mutex
  • Temporalio.Workflows.Semaphore - Safe form of System.Threading.Semaphore or System.Threading.SemaphoreSlim

Cloud Operations Client (EXPERIMENTAL)

For making operation-based calls against the cloud, there is now a Temporalio.Client.TemporalCloudOperationsClient
that implements ITemporalCloudOperationsClient and contains a static ConnectAsync method that works similar to the
TemporalClient version. There is a CloudService property on this client that gives raw access to the gRPC service.

This SDK API and the cloud operations API is experimental and may change in incompatible ways in the future.

Resource-based Worker Auto-tuning (EXPERIMENTAL)

Experimental support for worker tuning has been added along with an implementation for auto-tuning based on available
resources. TemporalWorkerOptions now has a Tuner field that can be set with an instance of
Temporalio.Worker.Tuning.IWorkerTuner. This can be a fixed-size based tuner via WorkerTuner.CreateFixedSize or based
on resources via WorkerTuner.CreateResourceBased. Technically the interface can be manually implemented to return
custom ISlotSuppliers, but only fixed-size and resource-based slot suppliers are currently supported, custom slot
suppliers will appear in the future.

This SDK API is experimental and may change in incompatible ways in the future.

Specific Changes

2024-07-01 - 29753e5 - Expose resource based autotuning (#293)
2024-07-01 - 9ce6b8f - Added exception notation to ConnectAsync method (#295)
2024-07-02 - 0d0334f - Minor test fixes (#296)
2024-07-02 - 72f6fb2 - Warn on unfinished workflow handlers (#294)
2024-07-02 - 8349537 - Add Temporalio.Workflows.Mutex (#298)
2024-07-08 - 4a6d4a0 - Experimental cloud operations client (#302)
2024-07-10 - 1fceb0b - Skip slow versioning test and update vuln dep (#301)
2024-07-12 - fa3867e - Support for workflow ID conflict policy (#304)
2024-07-18 - 23af803 - Use GH ARM runner (#308)
2024-07-19 - 32d1931 - Support query for listing schedules (#310)
2024-07-25 - df3b47a - Command reordering in Core (#315)
2024-08-02 - 64c3140 - Change default schedule catchup window to match API (#319)
2024-08-05 - 62da5d6 - Add workflow id conflict policy to signal with start (#322)
2024-08-05 - ac9c891 - Allow updating search attributes from schedule updates (#320)
2024-08-06 - 2ce6c99 - HTTP CONNECT proxy support (#318)
2024-08-06 - 66574bd - Add rule code and edit signal warning (#317)
2024-08-06 - 6695adf - Add Workflow.RunTaskAsync and Workflow.WhenAllAsync (#313)
2024-08-06 - 9ffc963 - Add features repo test to .NET CI (#324)
2024-08-07 - 89c43d1 - Add omes image build (#323)
2024-08-08 - 0b5a857 - Fix NuGet package smoke test (#326)
2024-08-09 - efdb9a0 - Do not warn about leftover handlers on workflow failure (#329)