Force effect tasks to be on @MainActor. #1131
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 should fix #1130, but it's also something we will be doing in our upcoming TCA concurrency updates, so might as well get a little bit of this in now.
Effectively this means that one no longer needs to do
Effect.task { @MainActor ... }if using this API inside a reducer. It will be done automatically for you, and you don't even need.receive(on: ...).However, we still do not recommend using
Effect.taskdirectly in a reducer unless you are willing to deal with the annoyances that come with it when testing. In particular, you either need to add some super short expectations in order to allow the task to do its work, or you need to make your testasyncand sprinkle in someawait Task.yield()s.Our upcoming concurrency tools for TCA will make this much nicer.