Async event handlers are no longer allowed #119
Merged
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.
This PR removes support for event handlers that are coroutines (i.e. async functions).
This functionality was initially introduced to allow using async wgpu methods in callbacks. However, in hindsight it does not fit well, and it also prevents handling events inside the native draw event, which causes problem on its own (see e.g. #56).
With pygfx/wgpu-py#739, users have options to handle async methods using callbacks (using
promise.then().So to summarize: disallowing async functions, means that
emit()and other methods of the event emitter can now be sync, which means they can be called anywhere, which we need to create a congruent event loop.(I have more changes to the scheduling planned, to allow asynchronous bitmap presenting, and this change will help in that work.)
Although this is a breaking API change, I doubt that anyone is actually using this coroutines as callbacks.