Improve wording in README

This commit is contained in:
Michael Bull 2021-02-10 22:34:44 +00:00
parent 0df4c62d4f
commit 94bccacb2d
1 changed files with 11 additions and 5 deletions

View File

@ -148,7 +148,8 @@ resources on the topic of monad comprehensions.
#### Coroutine Support #### Coroutine Support
Use of coroutines within a `binding` block requires an additional dependency: Use of suspending functions within a `binding` block requires an additional
dependency:
```kotlin ```kotlin
dependencies { dependencies {
@ -157,15 +158,20 @@ dependencies {
} }
``` ```
This allows for asynchronous binds to operate so that if a bind were to fail, The coroutine implementation of `binding` has been designed so that the first
the binding block will return with the first failing async result: call to `bind()` that fails will cancel all child coroutines within the current
coroutine scope.
The example below demonstrates a computationally expensive function that takes
five milliseconds to compute being eagerly cancelled as soon as a smaller
function fails in just one millisecond:
```kotlin ```kotlin
suspend fun failsIn5ms(): Result<Int, DomainErrorA> { ... } suspend fun failsIn5ms(): Result<Int, DomainErrorA> { ... }
suspend fun failsIn1ms(): Result<Int, DomainErrorB> { ... } suspend fun failsIn1ms(): Result<Int, DomainErrorB> { ... }
runBlocking{ runBlocking {
val result = binding<Int, BindingError> { val result = binding<Int, BindingError> {
val x = async { failsIn5ms().bind() } val x = async { failsIn5ms().bind() }
val y = async { failsIn1ms().bind() } val y = async { failsIn1ms().bind() }