- Add retry to grpc calls that failed due to transient errors by @sophiatev (#714)
- Harden grpc worker and client against silent disconnects by @berndverst (#708)
- Preserve late events after continue-as-new by @berndverst (#711)
- Fix inprocesstesthost continueasnew stuck-instance race condition by @bachuv (#707)
- Fix continue-as-new race condition at inprocesstesthost by @nytian (#703)
- Add opt-in timeout to purgeinstancesfilter for partial purge by @yunchuwang (#680)
- fix: revert shared framework packages to 8.x for net8 Functions host compatibility (#698)
- Release v1.23.2 (#693)
- fix: improve large payload error handling — better error message and prevent infinite retry and fix conflict with auto chunking (#691)
- Bump dotnet-sdk from 10.0.103 to 10.0.201 (#673)
- Bump Microsoft.Azure.DurableTask.Core from 3.7.0 to 3.7.1 (#685)
- feat(copilot): add evidence-based Copilot customizations (#690)
- Fix CHANGELOG line ending preservation in Prepare Release workflow (#687)
- Add Prepare Release GitHub Action for automated release kickoff (#686)
- Add ContinueAsNewOptions with NewVersion support (#682)
- Fix concurrent timer race condition in InMemoryOrchestrationService (#678)
- Generate extension methods in task namespace instead of Microsoft.DurableTask (#538)
- Fix #668: Change work item filters from auto opt-in to explicit opt-in (#669)
- Add
ReplaySafeLoggerFactoryfor context wrappers (#670) - Add NuGet publish job for Microsoft.DurableTask.Analyzers (#662)
- Bump Azure.Identity from 1.17.1 to 1.18.0 (#656)
- Bump Microsoft.Azure.Functions.Worker.Extensions.DurableTask from 1.12.1 to 1.15.0 (#658)
- Add missing input validation to SuspendInstanceAsync and ResumeInstanceAsync (#652)
- Add ExportHistory package to NuGet publish pipeline (#651)
- Add OpenTelemetry sample and update deps (#637)
- Fix build warnings and clean up exception message (#647)
- Changing the default dedupe statuses behavior by sophiatev (#622)
- Bump Analyzers package version to 1.22.0 stable release (from 0.3.0)
- Add DURABLE0011: ContinueAsNew warning for unbounded orchestration loops (#660)
- Introduce WorkItemFilters into worker flow by halspang (#616)
- Fix Analyzers treating passed in variable argument name as null by wangbill (#640)
- Move DURABLE0009/0010 from Unshipped to Shipped for v0.3.0 by cgillum (#641)
- Fix GrpcChannel handle leak in AzureManaged backendby nytian (#629)
- Partial orchestration workitem completion support (merge after next dts dp release) by wangbill (#514)
- Export history job by wangbill (#494)
- Add dependency injection support to durabletasktesthost by Naiyuan Tian (#613)
- Throw an
InvalidOperationExceptionfor purge requests on running orchestrations by sophiatev (#611) - Validate c# identifiers in durabletask source generator by Copilot (#578)
- Document orchestration discovery and method probing behavior in analyzers by Copilot (#594)
- Extended sessions for entities in .net isolated by sophiatev (#507)
- Adding the ability to specify tags and a retry policy for suborchestrations by sophiatev (#603)
- Improve durabletask source generator detection and add optional project type configuration by Copilot (#575)
- Add timeprovider support to orchestration analyzer by Copilot (#573)
- Expand azure functions smoke tests to cover source generator scenarios by Copilot (#604)
- Fix "syntaxtree is not part of the compilation" exception in orchestration analyzers by Copilot (#588)
- Add waitforexternalevent overload with timeout and cancellation token by Copilot (#555)
- Fix source generator for void-returning activity functions by Copilot (#554)
- Add copy constructors to TaskOptions and sub-classes by halspang (#587)
- Change FunctionNotFound analyzer severity to Info for cross-assembly scenarios by Copilot (#584)
- Add Roslyn analyzer for non-contextual logger usage in orchestrations (DURABLE0010) by Copilot (#553)
- Add specific logging categories for Worker.Grpc and orchestration logs with backward-compatible opt-in by Copilot (#583)
- Fix flaky integration test race condition in dedup status check by Copilot (#579)
- Add analyzer to suggest input parameter binding over GetInput() by Copilot (#550)
- Add strongly-typed external events with DurableEventAttribute by Copilot (#549)
- Fix orchestration analyzer to detect non-function orchestrations correctly by Copilot (#572)
- Fix race condition in WaitForInstanceAsync causing intermittent test failures by Copilot (#574)
- Add HelpLinkUri to Roslyn analyzer diagnostics by Copilot (#548)
- Add DateTimeOffset.Now and DateTimeOffset.UtcNow detection to Roslyn analyzer by Copilot (#547)
- Bump Google.Protobuf from 3.33.1 to 3.33.2 by dependabot[bot] (#569)
- Add integration test coverage for Suspend/Resume operations by Copilot (#546)
- Bump coverlet.collector from 6.0.2 to 6.0.4 by dependabot[bot] (#527)
- Bump FluentAssertions from 6.12.1 to 6.12.2 by dependabot[bot] (#528)
- Add Azure Functions smoke tests with Docker CI automation by Copilot (#545)
- Bump dotnet-sdk from 10.0.100 to 10.0.101 by dependabot[bot] (#568)
- Add scheduled auto-closure for stale "Needs Author Feedback" issues by Copilot (#566)
- Support dedup status when starting orchestration by wangbill (#542)
- Add 404 exception handling in blobpayloadstore.downloadasync by Copilot (#534)
- Bump analyzers version to 0.2.0 by Copilot (#552)
- Add integration tests for exception type handling by Copilot (#544)
- Add roslyn analyzer to detect calls to non-existent functions (name mismatch) by Copilot (#530)
- Remove preview suffix by Copilot (#541)
- Add xml documentation with see cref links to generated code for better ide navigation by Copilot (#535)
- Add entity source generation support for durable functions by Copilot (#533)
- Add taskentity support to durabletasksourcegenerator by Copilot (#517)
- Bump azure.identity by dependabot[bot] (#525)
- Bump google.protobuf by dependabot[bot] (#529)
- Configure dependabot for dotnet-sdk updates by Tomer Rosenthal (#524)
- Add code review guidelines to copilot-instructions.md by Copilot (#522)
- Remove webapi sample by sophiatev (#520)
- Fix functioncontext check and polymorphic type conversions in activity analyzer by Naiyuan Tian (#506)
- Align waitforexternalevent waiter picking order to lifo by wangbill (#509)
- Update project to support .net 6.0 alongside .net 8.0 and .net 10 by Tomer Rosenthal (#512)
- Update project to target .net 8.0 and .net 10 and upgrade dependencies by Tomer Rosenthal (#510)
- Support worker features announcement by wangbill (#502)
- Introduce custom copilot review instructions by halspang (#503)
- Add API to get orchestration history (#516)
- Fix Worker Registry and Add Documentation Notes by nytian in #462
- Initial attempt to fix carryover events issue on continue-as-new by cgillum in #496
- Fix encoding of entity unlock events by sebastianburckhardt in #462
-Add Microsoft.DurableTask.Extensions.AzureBlobPayloads to nuget publish by YunchuWang in #488 -Add API for In-process Testing and Add Class-Syntax Integration Tests by nytian in #476 -Fix Purge Instance Comments by sophiatev in #489 -Fix ServiceCollectionExtensions.AddDurableTaskClient by sophiatev in #490 -Update zuremanaged sdks to official version by YunchuWang in #493 -Add Rewind to .NET isolated by sophiatev in #479 -Add tags field to CompleteOrchestratorAction by sophiatev in #492
- Generate changelog script + update changelog for v1.16.1 by wangbill (#486)
- Remove unnecessary project reference to grpc.azuremanagedbackend in azureblobpayloads.csproj by wangbill (#485)
- Large payload azure blob externalization support by wangbill (#468)
- Include exception properties in failure details when orchestration throws directly by Naiyuan Tian (#482)
- Set low priority for scheduled runs by Daniel Castro (#477)
- Include Exception Properties at FailureDetails by nytian in(#474)
- Add version check to activities by @halspang in (#472)
- Abandon workitem if processing workitem failed by @YunchuWang in (#467)
- Extended Sessions for Isolated (Orchestrations) by @sophiatev in (#449)
- Add RestartAsync API Support at DurableTaskClient (#456)
- Add orchestration execution tracing (#441)
- Activity tag support (#426)
- Adding Analyzer to build and release (#444)
- Add ability to filter orchestrations at worker (#443)
- Removing breaking change for TaskOptions (#446)
- Expose gRPC retry options in Azure Managed extensions (#447)
- Add New Property Properties to TaskOrchestrationContext (#415)
- Add automatic retry on gateway timeout in
GrpcDurableTaskClient.WaitForInstanceCompletionAsync(#412) - Add specific logging for NotFound error on worker connection (#413)
- Add user agent header to gRPC called (#417)
- Enrich User-Agent Header in gRPC Metadata to indicate Client or Worker as caller (#421)
- Change DTS user agent metadata to avoid overlap with gRPC user agent (#423)
- Add extension methods for registering entities by type (#427)
- Add TaskVersion and utilize it for version overrides when starting orchestrations (#416)
- Update sub-orchestration default versioning (#437)
- Distributed Tracing for Entities (Isolated) (#404)
- Update DurableTask.Core to v3.1.0 and Bump version to v1.10.0 by @nytian in (#411)
- Add basic orchestration and activity execution logs by @cgillum in (#405)
- Add default version in
TaskOrchestrationContextby @halspang in (#408)
- Fix schedule sample logging setup by @YunchuWang in (#392)
- Introduce versioning to the DurableTaskClient by @halspang in (#393)
- Support for local credential types for DTS by @cgillum in (#396)
- Add utilities for easier versioning usage by @halspang in (#394)
- Add tags to CreateInstanceRequest by @torosent in (#397)
- Partial Purge Support by @YunchuWang in (#400)
- Dts Grpc client retry support by @YunchuWang in (#403)
- Introduce orchestration versioning into worker by @halspang in (#401)
- Add timeout to gRPC workitem streaming (#390)
- Add Schedule Support for Durable Task Framework (#368)
- Fixes and improvements
- Add parent trace context information when scheduling an orchestration (#358)
- Added new preview packages,
Microsoft.DurableTask.Client.AzureManagedandMicrosoft.DurableTask.Worker.AzureManaged - Move to Central Package Management (#373)
- Add new
IDurableTaskClientBuilder AddDurableTaskClient(IServiceCollection, string?)API
- Add new
IDurableTaskWorkerBuilder AddDurableTaskWorker(IServiceCollection, string?)API - Add support for work item history streaming
- Provide entity support for direct grpc connections to DTS (#369)
- Replace submodule for proto files with download script for easier maintenance
- Update to latest proto files
- Implement work item completion tokens for standalone worker scenarios (#359)
- Support for worker concurrency configuration (#359)
- Bump System.Text.Json to 6.0.10
- Initial support for the Azure-managed Durable Task Scheduler preview.
- Microsoft.Azure.DurableTask.Core dependency increased to
3.0.0
- Add
RetryPolicy.Handleproperty to allow for exception filtering on retries (#314)
- Microsoft.Azure.DurableTask.Core dependency increased to
2.17.1
- Fix filter not being passed along in
PurgeAllInstancesAsync(#289)
- Enable inner exception detail propagation in
TaskFailureDetails(#290) - Microsoft.Azure.DurableTask.Core dependency increased to
2.17.0
- Fix
TaskFailureDetails.IsCausedByto support custom exceptions and 3rd party exceptions (#273) - Microsoft.Azure.DurableTask.Core dependency increased to
2.16.2
- Fix typo in
PurgeInstanceAsyncinDurableTaskClient(#264)
- Adds support to recursively terminate/purge sub-orchestrations in
GrpcDurableTaskClient(#262)
- Microsoft.Azure.DurableTask.Core dependency increased to
2.16.1
- Microsoft.Azure.DurableTask.Core dependency increased to
2.16.0
- Microsoft.Azure.DurableTask.Core dependency increased to
2.16.0-preview.2
Adds support for durable entities. Learn more here.
- Microsoft.Azure.DurableTask.Core dependency increased to
2.16.0-preview.1
- Microsoft.Azure.DurableTask.Core dependency increased to
2.15.0(#212)
- Fix re-encoding of events when using
TaskOrchestrationContext.ContinueAsNew(preserveUnprocessedEvents: true)(#212)
- Fix handling of concurrent external events with the same name (#194)
- Fix instance ID not being passed in when using retry policy (#174)
- Add
GrpcDurableTaskWorkerOptions.CallInvokeras an alternative toGrpcDurableTaskWorkerOptions.Channel
- Add
GrpcDurableTaskClientOptions.CallInvokeras an alternative toGrpcDurableTaskClientOptions.Channel
- Fix issue with
TaskOrchestrationContext.Parentnot being set.
- Fix incorrect bounds check on
PurgeResult - Address typo for
DurableTaskClient.GetInstancesAsync(incorrectly pluralized)- Added
GetInstanceAsync - Hide
GetInstancesAsyncfrom editor
- Added
- Added
SuspendInstanceAsyncandResumeInstanceAsynctoDurableTaskClient. - Rename
DurableTaskClientmethodsTerminateAsync->TerminateInstanceAsyncPurgeInstanceMetadataAsync->PurgeInstanceAsyncPurgeInstances->PurgeAllInstancesAsyncGetInstanceMetadataAsync->GetInstanceAsyncGetInstances->GetAllInstancesAsync
TaskOrchestrationContext.CreateReplaySafeLoggernow createsILoggerdirectly (as opposed to wrapping an existingILogger).- Durable Functions class-based syntax now resolves
ITaskActivityinstances fromIServiceProvider, if available there. DurableTaskClientmethods have been touched up to ensureCancellationTokenis included, as well as is the last parameter.- Removed obsolete/unimplemented local lambda activity calls from
TaskOrchestrationContext - Input is now an optional parameter on
TaskOrchestrationContext.ContinueAsNew - Multi-target gRPC projects to now use
Grpc.Net.Clientwhen appropriate (.NET6.0 and up)
Note: Microsoft.DurableTask.Generators is remaining as preview.1.
Microsoft.DurableTask.Abstractions
Microsoft.DurableTask.Client
Microsoft.DurableTask.Client.Grpc
Microsoft.DurableTask.Worker
Microsoft.DurableTask.Worker.Grpc \
see v1.0.0-preview.1 for Microsoft.DurableTask.Generators
- Refactors and splits assemblies.
Microsoft.DurableTask.AbstractionsMicrosoft.DurableTask.GeneratorsMicrosoft.DurableTask.ClientMicrosoft.DurableTask.Client.GrpcMicrosoft.DurableTask.WorkerMicrosoft.DurableTask.Worker.Grpc
- Added more API documentation
- Adds ability to perform multi-instance query
- Adds
PurgeInstancesMetadataAsyncandPurgeInstancesAsyncsupport and implementation toGrpcDurableTaskClient - Fix issue with mixed Newtonsoft.Json and System.Text.Json serialization.
IDurableTaskClientProvideradded to support multiple named clients.- Added new options pattern for starting new and sub orchestrations.
- Overhauled builder API built on top of .NET generic host.
- Now relies on dependency injection.
- Integrates into options pattern, giving a variety of ways for user configuration.
- Builder is now re-enterable. Multiple calls to
.AddDurableTask{Worker|Client}with the same name will yield the exact same builder instance.
Microsoft.DurableTask.Generatorsreference removed.- Added new abstract property
TaskOrchestrationContext.ParentInstance. - Added new abstract method
DurableTaskClient.PurgeInstancesAsync. - Renamed
TaskOrchestratorBasetoTaskOrchestratorOnRunAsync->RunAsync, forced-nullability removed.- Nullability can be done in generic params, ie:
MyOrchestrator : TaskOrchestrator<string?, string?> - Nullability is not verified at runtime by the base class, it is up to the individual orchestrator implementations to verify their own nullability.
- Renamed
TaskActivityBasetoTaskActivityOnRunremoved. With bothOnRunandOnRunAsync, there was no compiler error when you did not implement one. The remaining method is now markedabstractto force an implementation. Synchronous implementation can still be done viaTask.FromResult.OnRunAsync->RunAsync, forced-nullability removed.- Nullability can be done in generic params, ie:
MyActivity : TaskActivity<string?, string?> - Nullability is not verified at runtime by the base class, it is up to the individual activity implementations to verify their own nullability.
TaskOrchestrationContext.StartSubOrchestrationAsyncrefactored:instanceIdparameter removed. Can now specify it via supplyingSubOrchestrationOptionsforTaskOptions.
TaskOptionsrefactored to be a record type.- Builder removed.
- Retry provided via a property
TaskRetryOptions, which is a pseudo union-type which can be either aRetryPolicyorAsyncRetryHandler. SubOrchestrationOptionsis a derived type that can be used to specific a sub-orchestrations instanceId.- Helper method
.WithInstanceId(string? instanceId)added.
DurableTaskClient.ScheduleNewOrchestrationInstanceAsyncrefactored:instanceIdandstartAfterwrapped intoStartOrchestrationOptionsobject.
- Builder API completely overhauled. Now built entirely on top of the .NET generic host.
- See samples for how the new API works.
- Supports multiple workers and named-clients.
- Ability to set
TaskName.Versionremoved for now. Will be added when we address versioning. IDurableTaskRegistryremoved, onlyDurableTaskRegistryconcrete type.- All lambda-methods renamed to
AddActivityFuncandAddOrchestratorFunc. This was to avoid ambiguous or incorrect overload resolution with the factory methods.
- All lambda-methods renamed to
Microsoft.DurableTask.Generators
Microsoft.DurableTask.Generatorsis now an optional package.- no longer automatically brought in when referencing other packages.
- To get code generation, add
<PackageReference Include="Microsoft.DurableTask.Generators" Version="1.0.0-preview.1" PrivateAssets="All" />to your csproj.
GeneratedDurableTaskExtensions.AddAllGeneratedTasksmadeinternal(frompublic)- This is also to avoid conflicts when multiple files have this method generated. When wanting to expose to external consumes, a new extension method can be manually authored in the desired namespace and with an appropriate name which calls this method.
Initial public release