Annotation Type BlockingExecutor


  • @Documented
    @Retention(CLASS)
    @Target({TYPE,TYPE_USE})
    public @interface BlockingExecutor
    Indicates that the annotated executor (CoroutineContext, Scheduler) allows blocking methods execution.

    If a given executor does not allow blocking calls, NonBlockingExecutor should be used.

    Example 1 (Kotlin coroutines):

    
      class BlockingExampleService {
          val dispatcher: @BlockingExecutor CoroutineContext
              get() { ... }
    
          suspend fun foo() {
              val result = withContext(dispatcher) {
                  blockingBuzz() // no IDE warning
              }
          }
    
          @Blocking fun blockingBuzz() { ... }
      }
     

    Example 2 (Java with Reactor framework):

    
     class BlockingExampleService {
         private static final @BlockingExecutor Scheduler blockingScheduler =
                 Schedulers.newBoundedElastic(4, 10, "executor");
    
         public Flux<String> foo(Flux<String> urls) {
             return urls.publishOn(blockingScheduler)
                     .map(url -> blockingBuzz(url));  // no IDE warning
         }
    
         @Blocking
         private String blockingBuzz(String url) { ... }
     }
     
    See Also:
    Blocking, NonBlocking