AsynHelper La bibliothèque Java comprend un ensemble de classes/méthodes utilitaires pour de tels appels asynchrones (et l'attente).
Si l'on souhaite exécuter un ensemble d'appels de méthodes ou de blocs de code de manière asynchrone, le programme comprend une méthode d'aide utile. AsyncTask .submitTasks comme dans l'extrait ci-dessous.
AsyncTask.submitTasks(
() -> getMethodParam1(arg1, arg2),
() -> getMethodParam2(arg2, arg3)
() -> getMethodParam3(arg3, arg4),
() -> {
//Some other code to run asynchronously
}
);
Si l'on souhaite attendre que l'exécution de tous les codes asynchrones soit terminée, la fonction AsyncTask.submitTasksAndWait (en anglais) peut être utilisé.
De même, si l'on souhaite obtenir une valeur de retour à partir de chaque appel de méthode asynchrone ou bloc de code, la fonction AsyncSupplier .submitSuppliers peut être utilisé pour que le résultat puisse être obtenu à partir du tableau des fournisseurs de résultats renvoyé par la méthode. Voici un exemple d'extrait :
Supplier<Object>[] resultSuppliers =
AsyncSupplier.submitSuppliers(
() -> getMethodParam1(arg1, arg2),
() -> getMethodParam2(arg3, arg4),
() -> getMethodParam3(arg5, arg6)
);
Object a = resultSuppliers[0].get();
Object b = resultSuppliers[1].get();
Object c = resultSuppliers[2].get();
myBigMethod(a,b,c);
Si le type de retour de chaque méthode est différent, utilisez le type d'extrait ci-dessous.
Supplier<String> aResultSupplier = AsyncSupplier.submitSupplier(() -> getMethodParam1(arg1, arg2));
Supplier<Integer> bResultSupplier = AsyncSupplier.submitSupplier(() -> getMethodParam2(arg3, arg4));
Supplier<Object> cResultSupplier = AsyncSupplier.submitSupplier(() -> getMethodParam3(arg5, arg6));
myBigMethod(aResultSupplier.get(), bResultSupplier.get(), cResultSupplier.get());
Le résultat des appels de méthodes/blocs de code asynchrones peut également être obtenu à un autre point du code dans le même thread ou dans un thread différent, comme dans l'extrait ci-dessous.
AsyncSupplier.submitSupplierForSingleAccess(() -> getMethodParam1(arg1, arg2), "a");
AsyncSupplier.submitSupplierForSingleAccess(() -> getMethodParam2(arg3, arg4), "b");
AsyncSupplier.submitSupplierForSingleAccess(() -> getMethodParam3(arg5, arg6), "c");
//Following can be in the same thread or a different thread
Optional<String> aResult = AsyncSupplier.waitAndGetFromSupplier(String.class, "a");
Optional<Integer> bResult = AsyncSupplier.waitAndGetFromSupplier(Integer.class, "b");
Optional<Object> cResult = AsyncSupplier.waitAndGetFromSupplier(Object.class, "c");
myBigMethod(aResult.get(),bResult.get(),cResult.get());