Provide visibility to running synchronously#16
Merged
Conversation
Motivation ---------- There are cases in complex systems where it is helpful for code to know that it is running within a call to AsyncHelper.RunSync. Furthermore, retrieving the previously replaced synchronization context can also be helpful. For example, a call to Form.ShowDialog in a WinForms app may want to reinstall the WindowsFormsSynchronizationContext since a new message pump will be running to process continuations. Modifications ------------- - Add IsRunningSynchronously property - Add GetReplacedSynchronizationContext method - Track the fact we're in the call to RunSync and processing work on its calling thread using a thread static
There was a problem hiding this comment.
Pull Request Overview
This PR introduces visibility into synchronous execution context by exposing whether code is running within AsyncHelper.RunSync and providing access to the replaced synchronization context. This enables scenarios like WinForms applications to reinstall their synchronization context when opening dialogs within async code.
Key Changes:
- Added
IsRunningSynchronouslyproperty to detect execution withinRunSync - Added
GetReplacedSynchronizationContext()method to retrieve the outermost replaced synchronization context - Implemented thread-static tracking to monitor
RunSyncexecution state
Reviewed Changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| ExclusiveSynchronizationContext.cs | Exposes parent synchronization context via public property |
| AsyncHelper.cs | Adds synchronous execution tracking with thread-static flag and new public API methods |
| CenterEdge.Async.UnitTests.csproj | Enables nullable reference types for stronger type safety |
| AsyncHelperTests.cs | Adds comprehensive test coverage for new synchronization context visibility features |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Signed-off-by: Brant Burnett <bburnett@centeredgesoftware.com>
ahornercenteredge
approved these changes
Oct 24, 2025
Contributor
Author
|
/merge |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
There are cases in complex systems where it is helpful for code to know that it is running within a call to AsyncHelper.RunSync. Furthermore, retrieving the previously replaced synchronization context can also be helpful. For example, a call to Form.ShowDialog in a WinForms app may want to reinstall the WindowsFormsSynchronizationContext since a new message pump will be running to process continuations.
Modifications