♻️ Create custom CoroutineScope to be used application-wide #410
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.
A new class called
AppCoroutineScope
was created to wrap the functionality of aCoroutineScope
without exposing the.cancel()
API. Since this scope should match the lifecycle of the App, it should never be cancelled. This class will avoid human error by not exposing the function to cancel the scope.The decision to create a wrapper instead of implementing the
CoroutineScope
interface was because the.cancel()
function is not part of the interface itself, it's an extension function. Due to the Liskov Substitution Principle, it would be possible to attribute aCustomCoroutineScope
in aCoroutineScope
interface, making it possible to access the.cancel()
function even if it was implemented in the custom one.For the moment, only the
.launch()
function is exposed. If other functions (such as.async()
) are needed then future changes will add them.