Pustaka AsynHelper Java mencakup sekumpulan kelas / metode utilitas untuk panggilan asinkron (dan tunggu).
Jika diinginkan untuk menjalankan seperangkat pemanggilan metode atau blok kode secara tidak serempak, itu termasuk metode pembantu yang berguna, AsyncTask .submitTasks seperti dalam cuplikan di bawah ini.
AsyncTask.submitTasks(
() -> getMethodParam1(arg1, arg2),
() -> getMethodParam2(arg2, arg3)
() -> getMethodParam3(arg3, arg4),
() -> {
//Some other code to run asynchronously
}
);
Jika diinginkan untuk menunggu sampai semua kode asinkron selesai dijalankan, varian AsyncTask.submitTasksAndWait dapat digunakan.
Juga jika diinginkan untuk memperoleh nilai balik dari setiap pemanggilan metode atau blok kode asinkron, AsyncSupplier .submitSuppliers dapat digunakan sehingga hasilnya dapat diperoleh dari larik pemasok yang dikembalikan oleh metode tersebut. Berikut cuplikan sampel:
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);
Jika jenis pengembalian setiap metode berbeda, gunakan jenis cuplikan di bawah ini.
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());
Hasil dari panggilan metode asinkron / blok kode juga dapat diperoleh pada titik kode berbeda di utas yang sama atau utas berbeda seperti pada cuplikan di bawah ini.
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());