temporalio / sdk-dotnet

Temporal .NET SDK
MIT License
375 stars 30 forks source link

Workflow completion command reordering #270

Closed cretz closed 2 months ago

cretz commented 2 months ago

What was changed

See https://github.com/temporalio/features/issues/481. Like other core-based SDKs, .NET put the workflow complete command on the command list immediately when it occurred from workflow return. And then it truncated anything else after that. So coroutines that completed in the same task but after workflow method return were dropped.

This issue changes that behavior to enure same-task-post-complete coroutine commands are preserved. The approach that is taken now is that, if we are not replaying (or replaying w/ SDK flag set) and there are commands after return, move the return to the end and set an SDK flag. Otherwise do as done today. This not only ensures that workflow completion comes last, but the checking for whether any post-complete commands even exist allow us to not set this flag.

(there is also a somewhat unrelated fix to a flaky user-client-replacement test)

Checklist

  1. Closes #249
cretz commented 2 months ago

Thanks for looking at this! Not sure anyone else is, so I am merging.