Make AsyncResult behave more like in older versions in cross-thread usage #1743
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.
Usage according to the documentation should be completely unchanged. Only cross-thread usage, which was never documented, should be effected.
Makes a best effort to route wakeups to the correct hub instead of hanging. In many cases, this works (actually somewhat more reliably than in older versions); in the cases it doesn't, we should at least print some exception so the user knows why their program hangs. In the best case of the "doesn't" cases, this includes an explanatory text.
The scenario laid out in #1739 is tested to work, except on PyPy, where we suffer from https://foss.heptapod.net/pypy/pypy/-/issues/3381
Required a small adaptation to semaphore.py to keep the status quo, which its own cross-thread algorithms relied on. We may be working towards some more general cross-thread primitives and support; #1742 comes out of this.