Package org.jetbrains.annotations
Annotation Interface NonBlockingExecutor
Indicates that the annotated executor (CoroutineContext, Scheduler)
does not allow blocking methods execution.
If a given executor allows blocking calls, BlockingExecutor
should be used.
Example 1 (Kotlin coroutines):
class NonBlockingExampleService {
val dispatcher: @NonBlockingExecutor CoroutineContext
get() { ... }
suspend fun foo() {
val result = withContext(dispatcher) {
blockingBuzz() // IDE warning: `Possibly blocking call in non-blocking context`
}
}
@Blocking fun blockingBuzz() { ... }
}
Example 2 (Java with Reactor framework):
class NonBlockingExampleService {
private static final @NonBlockingExecutor Scheduler operationsScheduler =
Schedulers.newParallel("parallel");
public Flux<String> foo(Flux<String> urls) {
return urls.publishOn(operationsScheduler)
.filter(url -> blockingBuzz(url) != null); // IDE warning: `Possibly blocking call in non-blocking context`
}
@Blocking
private String blockingBuzz(String url) { ... }
}
- See Also: