Как вызвать несколько методов асинхронно с различной реализацией - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь вызвать один метод 12 раз асинхронно.Но перед вызовом я устанавливаю что-то свое для каждого вызова метода.Как я могу сделать это более элегантным способом.

Я тоже использую пружину.

Я знаю о @async, но как я могу изменить тело 12 раз?

Callable<Object> task4 = () -> {

        CallContextHolder.setContext(callContext);
        try {

            Object m = dbQuery(userId);
            if (m == null){
                throw new RuntimeException();
            }
            return m;
        }
        catch (Exception e) {
            throw new IllegalStateException("task interrupted", e);
        }
    };
    Callable<Object> task5 = () -> {

        CallContextHolder.setContext(callContext); //here is the difference in every task
        try {

            Object m = dbQuery(userId);
            if (m == null){
                throw new RuntimeException();
            }
            return m;
        }
        catch (Exception e) {
            throw new IllegalStateException("task interrupted", e);
        }

1 Ответ

0 голосов
/ 03 января 2019

Вы можете использовать что-то вроде следующего метода

public Callable<Object> getCallable(CallContext context, String userId) { //replace types fro parameters to appropriate
    return () -> {
      CallContextHolder.setContext(callContext);
      try {
        Object m = dbQuery(userId);
        if (m == null){
            throw new RuntimeException();
        }
        return m;
      }
      catch (Exception e) {
        throw new IllegalStateException("task interrupted", e);
      }
   };
}

И использовать это следующим образом

Callable<Object> call1 = getCallable(callContext, userId);
Callable<Object> call2 = getCallable(callContext, userId);

Вы можете попытаться использовать некоторый тип цикла для генерации этих вызовов и сохранения ихв списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...