Thư viện Java AsynHelper bao gồm một tập hợp các lớp / phương thức tiện ích cho các cuộc gọi không đồng bộ (và chờ).
Nếu muốn chạy một tập hợp các lệnh gọi phương thức hoặc khối mã không đồng bộ, thì nó bao gồm một phương thức trợ giúp hữu ích AsyncTask .submitT task như trong đoạn trích dưới đây.
AsyncTask.submitTasks(
() -> getMethodParam1(arg1, arg2),
() -> getMethodParam2(arg2, arg3)
() -> getMethodParam3(arg3, arg4),
() -> {
//Some other code to run asynchronously
}
);
Nếu muốn chờ cho đến khi tất cả các mã không đồng bộ được hoàn thành, thì có thể sử dụng biến AsyncTask.submitT taskAndWait.
Ngoài ra nếu đó là mong muốn có được một giá trị trả về từ mỗi lời gọi phương thức không đồng bộ hoặc khối mã, AsyncSupplier .submitSuppliers thể được sử dụng để kết quả có thể được thì thu được bằng cách từ mảng cung cấp kết quả trả về bởi phương pháp này. Dưới đây là đoạn mẫu:
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);
Nếu loại trả về của mỗi phương thức khác nhau, hãy sử dụng loại đoạn mã dưới đây.
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());
Kết quả của các lệnh gọi / khối mã không đồng bộ cũng có thể được lấy tại một điểm mã khác nhau trong cùng một luồng hoặc một luồng khác như trong đoạn mã dưới đây.
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());