Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Coba lagi Aktivitas Gagal
Kegiatan kadang-kadang gagal karena alasan sementara, seperti kehilangan konektivitas sementara. Di lain waktu, aktivitas mungkin berhasil, sehingga cara yang tepat untuk menangani kegagalan aktivitas sering untuk mencoba lagi aktivitas, mungkin beberapa kali.
Ada berbagai strategi untuk mencoba kembali aktivitas; yang terbaik tergantung pada detail alur kerja Anda. Strategi jatuh ke dalam tiga kategori dasar:
-
retry-until-successStrategi hanya terus mencoba kembali aktivitas sampai selesai.
-
Strategi coba lagi eksponensial meningkatkan interval waktu antara coba lagi secara eksponensial sampai aktivitas selesai atau proses mencapai titik pemfilteran stopword tertentu, seperti jumlah maksimum upaya.
-
Strategi coba lagi kustom memutuskan apakah atau cara mencoba lagi aktivitas setelah setiap upaya gagal.
Bagian berikut menjelaskan cara menerapkan strategi ini. Contoh pekerja alur kerja semua menggunakan aktivitas tunggal, unreliableActivity, yang secara acak melakukan salah satu dari berikut ini:
-
Selesaikan segera
-
Gagal sengaja dengan melebihi nilai waktu habis
-
Gagal sengaja dengan melempar
IllegalStateException
Retry-Until-Success Strategi
Strategi coba lagi yang paling sederhana adalah terus mencoba kembali aktivitas setiap kali gagal sampai akhirnya berhasil. Pola dasar adalah:
-
Menerapkan sebuah
TryCatchbersarang atau kelasTryCatchFinallydalam metode titik masuk alur kerja Anda. -
Jalankan aktivitas di
doTry -
Jika aktivitas gagal, kerangka kerja memanggil
doCatch, yang menjalankan metode titik masuk lagi. -
Ulangi Langkah 2 - 3 hingga aktivitas selesai dengan sukses.
Alur kerja berikut mengimplementasikan strategi. retry-until-success Antarmuka alur kerja diimplementasikan dalam RetryActivityRecipeWorkflow dan memiliki satu metode, runUnreliableActivityTillSuccess, yang merupakan titik masuk alur kerja. Pekerja alur kerja diimplementasikan dalam RetryActivityRecipeWorkflowImpl, sebagai berikut:
public class RetryActivityRecipeWorkflowImpl implements RetryActivityRecipeWorkflow { @Override public void runUnreliableActivityTillSuccess() { final Settable<Boolean> retryActivity = new Settable<Boolean>(); new TryCatch() { @Override protected void doTry() throws Throwable { Promise<Void> activityRanSuccessfully = client.unreliableActivity(); setRetryActivityToFalse(activityRanSuccessfully, retryActivity); } @Override protected void doCatch(Throwable e) throws Throwable { retryActivity.set(true); } }; restartRunUnreliableActivityTillSuccess(retryActivity); } @Asynchronous private void setRetryActivityToFalse( Promise<Void> activityRanSuccessfully, @NoWait Settable<Boolean> retryActivity) { retryActivity.set(false); } @Asynchronous private void restartRunUnreliableActivityTillSuccess( Settable<Boolean> retryActivity) { if (retryActivity.get()) { runUnreliableActivityTillSuccess(); } } }
Alur kerja bekerja sebagai berikut:
-
runUnreliableActivityTillSuccessmembuat objekSettable<Boolean>bernamaretryActivityyang digunakan untuk menunjukkan apakah aktivitas gagal dan harus dicoba lagi.Settable<T>berasal dariPromise<T>dan bekerja banyak dengan cara yang sama, tetapi Anda menetapkan nilai objekSettable<T>secara manual. -
runUnreliableActivityTillSuccessmengimplementasikan sebuah kelasTryCatchbersarang anonim kelas untuk menangani setiap pengecualian yang dilemparkan oleh aktivitasunreliableActivity. Untuk diskusi lebih lanjut tentang cara menangani pengecualian dilemparkan oleh kode asinkron, lihat Penanganan Kesalahan. -
doTrymengeksekusi aktivitasunreliableActivity, yang mengembalikan objekPromise<Void>bernamaactivityRanSuccessfully. -
doTrymemanggil metodesetRetryActivityToFalseasinkron, yang memiliki dua parameter:-
activityRanSuccessfullymengambil objekPromise<Void>yang dikembalikan oleh aktivitasunreliableActivity. -
retryActivitymengambil objekretryActivity.
Jika
unreliableActivityselesai,activityRanSuccessfullymenjadi siap dansetRetryActivityToFalsemengaturretryActivityke SALAH. Jika tidak,activityRanSuccessfullytidak pernah menjadi siap dansetRetryActivityToFalsetidak mengeksekusi. -
-
Jika
unreliableActivitymelempar pengecualian, kerangka kerja memanggildoCatchdan meneruskan objek pengecualian.doCatchsetretryActivityke betul. -
runUnreliableActivityTillSuccessmemanggil metoderestartRunUnreliableActivityTillSuccessasinkron dan meneruskannya objekretryActivity. KarenaretryActivityadalah jenisPromise<T>,restartRunUnreliableActivityTillSuccessmenunda eksekusi sampairetryActivitysudah siap, yang terjadi setelahnyaTryCatchselesai. -
Saat
retryActivitysudah siap,restartRunUnreliableActivityTillSuccessmengekstrak nilai.-
Jika nilai adalah
false, coba lagi berhasil.restartRunUnreliableActivityTillSuccesstidak dan urutan coba lagi berakhir. -
Jika nilai benar, coba lagi gagal.
restartRunUnreliableActivityTillSuccessmemanggilrunUnreliableActivityTillSuccessuntuk menjalankan aktivitas lagi.
-
-
Langkah 1 - 7 ulangi sehingga
unreliableActivityselesai.
catatan
doCatch tidak menangani pengecualian; itu hanya menetapkan objek retryActivity ke BETUL untuk menunjukkan bahwa aktivitas gagal. Coba lagi ditangani oleh metode restartRunUnreliableActivityTillSuccess asinkron, yang menunda eksekusi sampai TryCatch selesai. Alasan untuk pendekatan ini adalah bahwa, jika Anda mencoba kembali aktivitas di doCatch, Anda tidak dapat membatalkannya. Mencoba kembali aktivitas di restartRunUnreliableActivityTillSuccess mengizinkan Anda untuk melaksanakan kegiatan yang dapat dibatalkan.
Strategi Coba Kembali Eksponensial
Dengan strategi coba lagi eksponensial, kerangka kerja mengeksekusi aktivitas gagal lagi setelah jangka waktu tertentu, N detik. Jika upaya gagal kerangka kerja mengeksekusi aktivitas lagi setelah 2N detik, dan kemudian 4N detik dan seterusnya. Karena waktu tunggu bisa mendapatkan cukup besar, Anda biasanya menghentikan upaya coba lagi di beberapa titik daripada berlanjut tanpa batas..
Kerangka kerja ini menyediakan tiga cara untuk menerapkan strategi coba lagi eksponensial:
-
Anotasi
@ExponentialRetryadalah pendekatan yang paling sederhana, tetapi Anda harus mengatur opsi konfigurasi coba lagi pada waktu kompilasi. -
Kelas
RetryDecoratormengizinkan Anda untuk mengatur konfigurasi coba lagi pada waktu aktif dan mengubahnya sesuai kebutuhan. -
Kelas
AsyncRetryingExecutormengizinkan Anda untuk mengatur konfigurasi coba lagi pada waktu aktif dan mengubahnya sesuai kebutuhan. Selain itu, kerangka kerja memanggil metodeAsyncRunnable.runyang diimplementasikan pengguna untuk menjalankan setiap upaya coba lagi.
Semua pendekatan mendukung opsi konfigurasi berikut, di mana nilai waktu dalam detik:
-
Waktu tunggu percobaan ulang awal.
-
Koefisien back-off, yang digunakan untuk komputasi interval coba lagi, sebagai berikut:
retryInterval = initialRetryIntervalSeconds * Math.pow(backoffCoefficient, numberOfTries - 2)Nilai default adalah 2.0.
-
Jumlah maksimum upaya coba lagi. Nilai default tidak terbatas.
-
Interval coba lagi maksimum. Nilai default tidak terbatas.
-
Waktu kedaluwarsa. Coba lagi upaya berhenti ketika total durasi proses melebihi nilai ini. Nilai default tidak terbatas.
-
Pengecualian yang akan memicu proses coba lagi. Secara default, setiap pengecualian memicu proses coba lagi.
-
Pengecualian yang tidak akan memicu upaya coba lagi. Secara default, tidak ada pengecualian yang dikecualikan.
Bagian berikut menjelaskan berbagai cara yang Anda dapat menerapkan strategi coba lagi eksponensial.
Coba lagi eksponensial dengan @ ExponentialRetry
Cara termudah untuk menerapkan strategi coba lagi eksponensial untuk suatu kegiatan adalah dengan menerapkan anotasi @ExponentialRetry untuk aktivitas dalam definisi antarmuka. Jika aktivitas gagal, kerangka kerja menangani proses coba lagi secara otomatis, berdasarkan nilai opsi yang ditentukan. Pola dasar adalah:
-
Terapkan
@ExponentialRetryuntuk aktivitas yang sesuai dan menentukan konfigurasi coba lagi. -
Jika aktivitas dijelaskan gagal, kerangka kerja secara otomatis mencoba ulang aktivitas sesuai dengan konfigurasi yang ditentukan oleh argumen penjelasan ini.
Pekerja alur kerja ExponentialRetryAnnotationWorkflow mengimplementasikan strategi coba lagi eksponensial dengan menggunakan anotasi @ExponentialRetry. anotasi tersebut menggunakan aktivitas unreliableActivity yang definisi antarmukanya diimplementasikan dalam ExponentialRetryAnnotationActivities sebagai berikut:
@Activities(version = "1.0") @ActivityRegistrationOptions( defaultTaskScheduleToStartTimeoutSeconds = 30, defaultTaskStartToCloseTimeoutSeconds = 30) public interface ExponentialRetryAnnotationActivities { @ExponentialRetry( initialRetryIntervalSeconds = 5, maximumAttempts = 5, exceptionsToRetry = IllegalStateException.class) public void unreliableActivity(); }
Opsi @ExponentialRetry menentukan strategi berikut:
-
Coba lagi hanya jika aktivitas melempar
IllegalStateException. -
Gunakan waktu tunggu awal 5 detik.
-
Tidak lebih dari 5 upaya coba lagi.
Antarmuka alur kerja diimplementasikan dalam RetryWorkflow dan memiliki satu metode, process, yang merupakan titik masuk alur kerja. Pekerja alur kerja diimplementasikan dalam ExponentialRetryAnnotationWorkflowImpl, sebagai berikut:
public class ExponentialRetryAnnotationWorkflowImpl implements RetryWorkflow { public void process() { handleUnreliableActivity(); } public void handleUnreliableActivity() { client.unreliableActivity(); } }
Alur kerja bekerja sebagai berikut:
-
processmenjalankan metodehandleUnreliableActivitysinkron. -
handleUnreliableActivitymengeksekusi aktivitasunreliableActivity.
Jika aktivitas gagal dengan melempar IllegalStateException, kerangka kerja secara otomatis menjalankan strategi coba lagi yang ditentukan dalam ExponentialRetryAnnotationActivities.
Coba Ulang Eksponensial dengan Kelas RetryDecorator
@ExponentialRetry mudah digunakan. Namun, konfigurasi statis dan ditetapkan pada waktu kompilasi, sehingga kerangka kerja menggunakan strategi coba lagi yang sama setiap kali aktivitas gagal. Anda dapat menerapkan strategi coba lagi eksponensial yang lebih fleksibel dengan menggunakan kelas RetryDecorator, yang mengizinkan Anda untuk menentukan konfigurasi pada waktu aktif dan mengubahnya sesuai kebutuhan. Pola dasar adalah:
-
Buat dan konfigurasi objek
ExponentialRetryPolicyyang menentukan konfigurasi coba lagi. -
Buat objek
RetryDecoratordan melalui objekExponentialRetryPolicydari Langkah 1 untuk konstruktor. -
Terapkan objek dekorator untuk aktivitas dengan melewati nama kelas klien aktivitas ke objek
RetryDecoratormenghiasi metode. -
Mengeksekusi aktivitas.
Jika aktivitas gagal, kerangka kerja mencoba ulang aktivitas sesuai dengan konfigurasi objek ExponentialRetryPolicy. Anda dapat mengubah konfigurasi coba lagi yang diperlukan dengan memodifikasi objek ini.
catatan
Anotasi @ExponentialRetry dan kelas RetryDecorator sama-sama eksklusif. Anda tidak dapat menggunakan RetryDecorator untuk secara dinamis mengesampingkan kebijakan coba lagi yang ditentukan oleh anotasi @ExponentialRetry.
Implementasi alur kerja berikut menunjukkan cara menggunakan kelas RetryDecorator untuk menerapkan strategi coba lagi eksponensial. Implementasi menggunakan aktivitas unreliableActivity yang tidak memiliki anotasi @ExponentialRetry. Antarmuka alur kerja diimplementasikan dalam RetryWorkflow dan memiliki satu metode, process, yang merupakan titik masuk alur kerja. Pekerja alur kerja diimplementasikan dalam DecoratorRetryWorkflowImpl, sebagai berikut:
public class DecoratorRetryWorkflowImpl implements RetryWorkflow { ... public void process() { long initialRetryIntervalSeconds = 5; int maximumAttempts = 5; ExponentialRetryPolicy retryPolicy = new ExponentialRetryPolicy( initialRetryIntervalSeconds).withMaximumAttempts(maximumAttempts); Decorator retryDecorator = new RetryDecorator(retryPolicy); client = retryDecorator.decorate(RetryActivitiesClient.class, client); handleUnreliableActivity(); } public void handleUnreliableActivity() { client.unreliableActivity(); } }
Alur kerja bekerja sebagai berikut:
-
processmembuat dan mengkonfigurasi objekExponentialRetryPolicyoleh:-
Melewati interval coba lagi awal untuk konstruktor.
-
Memanggil metode objek
withMaximumAttemptsuntuk mengatur jumlah maksimum upaya untuk 5.ExponentialRetryPolicymengekspos lainnya objekwithyang dapat Anda gunakan untuk menentukan opsi konfigurasi lainnya.
-
-
processmembuat objekRetryDecoratorbernamaretryDecoratordan meneruskan objekExponentialRetryPolicydari Langkah 1 ke konstruktor. -
processmenerapkan dekorator untuk aktivitas dengan memanggil metoderetryDecorator.decoratedan meneruskan itu nama kelas aktivitas klien. -
handleUnreliableActivitymengeksekusi aktivitas.
Jika aktivitas gagal, kerangka kerja coba lagi sesuai dengan konfigurasi yang ditentukan pada Langkah 1.
catatan
Beberapa ExponentialRetryPolicy metode kelas with memiliki metode set yang sesuai yang dapat Anda hubungi untuk mengubah opsi konfigurasi yang sesuai setiap saat: setBackoffCoefficient, setMaximumAttempts, setMaximumRetryIntervalSeconds, dan setMaximumRetryExpirationIntervalSeconds.
Coba Ulang Eksponensial dengan Kelas AsyncRetryingExecutor
Kelas RetryDecorator menyediakan lebih banyak fleksibilitas dalam mengkonfigurasi proses coba lagi daripada @ExponentialRetry, namun kerangka kerja masih menjalankan upaya coba lagi secara otomatis, berdasarkan objek konfigurasi ExponentialRetryPolicy saat ini. Pendekatan yang lebih fleksibel adalah dengan menggunakan kelas AsyncRetryingExecutor. Selain mengizinkan Anda untuk mengkonfigurasi proses coba lagi pada waktu aktif, kerangka kerja memanggil metode AsyncRunnable.run yang diimplementasikan pengguna untuk menjalankan setiap upaya coba lagi bukan hanya mengeksekusi aktivitas.
Pola dasar adalah:
-
Buat dan konfigurasikan objek
ExponentialRetryPolicyuntuk menentukan konfigurasi coba lagi. -
Buat objek
AsyncRetryingExecutor, dan meneruskannya objekExponentialRetryPolicydan sebuah instans dari jam alur kerja. -
Menerapkan sebuah
TryCatchbersarang anonim atau kelasTryCatchFinally. -
Menerapkan kelas
AsyncRunnableanonim dan menimpa metoderununtuk menerapkan kode kustom untuk menjalankan aktivitas. -
Ganti
doTryuntuk memanggilAsyncRetryingExecutormetodeexecuteobjek dan meneruskannya kelasAsyncRunnabledari Langkah 4. ObjekAsyncRetryingExecutormemanggilAsyncRunnable.rununtuk menjalankan aktivitas. -
Jika aktivitas gagal, objek
AsyncRetryingExecutormemanggil metodeAsyncRunnable.runlagi, sesuai dengan kebijakan coba lagi yang ditentukan pada Langkah 1.
Alur kerja berikut menunjukkan cara menggunakan kelas AsyncRetryingExecutor untuk menerapkan strategi coba lagi eksponensial. Alur kerja menggunakan aktivitas unreliableActivity yang sama sebagai alur kerja DecoratorRetryWorkflowyang dibahas sebelumnya. Antarmuka alur kerja diimplementasikan dalam RetryWorkflow dan memiliki satu metode, process, yang merupakan titik masuk alur kerja. Pekerja alur kerja diimplementasikan dalam AsyncExecutorRetryWorkflowImpl, sebagai berikut:
public class AsyncExecutorRetryWorkflowImpl implements RetryWorkflow { private final RetryActivitiesClient client = new RetryActivitiesClientImpl(); private final DecisionContextProvider contextProvider = new DecisionContextProviderImpl(); private final WorkflowClock clock = contextProvider.getDecisionContext().getWorkflowClock(); public void process() { long initialRetryIntervalSeconds = 5; int maximumAttempts = 5; handleUnreliableActivity(initialRetryIntervalSeconds, maximumAttempts); } public void handleUnreliableActivity(long initialRetryIntervalSeconds, int maximumAttempts) { ExponentialRetryPolicy retryPolicy = new ExponentialRetryPolicy(initialRetryIntervalSeconds).withMaximumAttempts(maximumAttempts); final AsyncExecutor executor = new AsyncRetryingExecutor(retryPolicy, clock); new TryCatch() { @Override protected void doTry() throws Throwable { executor.execute(new AsyncRunnable() { @Override public void run() throws Throwable { client.unreliableActivity(); } }); } @Override protected void doCatch(Throwable e) throws Throwable { } }; } }
Alur kerja bekerja sebagai berikut:
-
processmemanggil metodehandleUnreliableActivitydan meneruskannya pengaturan konfigurasi. -
handleUnreliableActivitymenggunakan pengaturan konfigurasi dari Langkah 1 untuk membuat objekExponentialRetryPolicy,retryPolicy. -
handleUnreliableActivitymembuat objekAsyncRetryExecutor,executor, dan meneruskan objekExponentialRetryPolicydari Langkah 2 dan sebuah instans dari jam alur kerja ke konstruktor -
handleUnreliableActivitymengimplementasikan sebuah kelasTryCatchbersarang anonim dan menimpadoTrydan metodedoCatchuntuk menjalankan upaya coba lagi dan menangani pengecualian apapun. -
doTrymembuat kelasAsyncRunnableanonim dan menimpa metoderununtuk menerapkan kode kustom untuk mengeksekusiunreliableActivity. Untuk kesederhanaan,runhanya mengeksekusi aktivitas, tetapi Anda dapat menerapkan pendekatan yang lebih canggih yang sesuai. -
doTrymemanggilexecutor.executedan meneruskannya objekAsyncRunnable.executememanggil metodeAsyncRunnableobjekrununtuk menjalankan aktivitas. -
Jika aktivitas gagal, pelaksana memanggil
runlagi, menurut konfigurasi objekretryPolicy.
Untuk diskusi lebih lanjut tentang cara menggunakan kelas TryCatch untuk menangani kesalahan, lihat AWS Flow Framework untuk Pengecualian Java.
Strategi Coba Lagi Kustom
Pendekatan yang paling fleksibel untuk mencoba kembali aktivitas yang gagal adalah strategi khusus, yang secara rekursif memanggil metode asinkron yang menjalankan upaya coba lagi, seperti strategi. retry-until-success Namun, bukan hanya menjalankan aktivitas lagi, Anda menerapkan logika kustom yang memutuskan apakah dan cara menjalankan setiap upaya coba lagi berturut-turut. Pola dasar adalah:
-
Buat objek status
Settable<T>, yang digunakan untuk menunjukkan apakah aktivitas gagal. -
Menerapkan sebuah
TryCatchbersarang atau kelasTryCatchFinally. -
doTrymengeksekusi aktivitas. -
Jika aktivitasnya gagal,
doCatchmenetapkan objek status untuk menunjukkan bahwa aktivitas gagal. -
Memanggil metode penanganan kegagalan asinkron dan menyebarkannya objek status. Metode menunda eksekusi sampai
TryCatchatauTryCatchFinallyselesai. -
Metode penanganan kegagalan memutuskan apakah akan mencoba kembali aktivitas, dan jika demikian, kapan.
Alur kerja berikut menunjukkan cara menerapkan strategi coba lagi kustom. Alur kerja menggunakan aktivitas unreliableActivity yang sama sebagai DecoratorRetryWorkflow dan alur kerja AsyncExecutorRetryWorkflow. Antarmuka alur kerja diimplementasikan dalam RetryWorkflow dan memiliki satu metode, process, yang merupakan titik masuk alur kerja. Pekerja alur kerja diimplementasikan dalam CustomLogicRetryWorkflowImpl, sebagai berikut:
public class CustomLogicRetryWorkflowImpl implements RetryWorkflow { ... public void process() { callActivityWithRetry(); } @Asynchronous public void callActivityWithRetry() { final Settable<Throwable> failure = new Settable<Throwable>(); new TryCatchFinally() { protected void doTry() throws Throwable { client.unreliableActivity(); } protected void doCatch(Throwable e) { failure.set(e); } protected void doFinally() throws Throwable { if (!failure.isReady()) { failure.set(null); } } }; retryOnFailure(failure); } @Asynchronous private void retryOnFailure(Promise<Throwable> failureP) { Throwable failure = failureP.get(); if (failure != null && shouldRetry(failure)) { callActivityWithRetry(); } } protected Boolean shouldRetry(Throwable e) { //custom logic to decide to retry the activity or not return true; } }
Alur kerja bekerja sebagai berikut:
-
processmemanggil metodecallActivityWithRetryasinkron. -
callActivityWithRetrymembuat objekSettable<Throwable>bernama gagal yang digunakan untuk menunjukkan apakah aktivitas telah gagal.Settable<T>berasal dariPromise<T>dan banyak bekerja dengan cara yang sama, tetapi Anda menetapkan nilai objekSettable<T>secara manual. -
callActivityWithRetrymengimplementasikan sebuah kelasTryCatchFinallybersarang anonim untuk menangani pengecualian yang dilemparkan olehunreliableActivity. Untuk diskusi lebih lanjut tentang cara menangani pengecualian dilemparkan oleh kode asinkron, lihat AWS Flow Framework untuk Pengecualian Java. -
doTrymengeksekusiunreliableActivity. -
Jika
unreliableActivitymelempar pengecualian, kerangka kerja memanggildoCatchdan meneruskannya objek pengecualian.doCatchmengaturfailureke objek pengecualian, yang menunjukkan bahwa aktivitas gagal dan menempatkan objek dalam status siap. -
doFinallymemeriksa apakahfailuresudah siap, yang akan benar hanya jikafailuretelah ditetapkan olehdoCatch.-
Jika
failuresudah siap,doFinallytidak melakukan apa-apa. -
Jika
failurebelum siap, aktivitas selesai dandoFinallymenetapkan gagal kenull.
-
-
callActivityWithRetrymemanggil metoderetryOnFailureasinkron dan meneruskannya dengan gagal. Karena gagal adalah jenisSettable<T>,callActivityWithRetrymenunda eksekusi sampai gagal siap, yang terjadi setelahTryCatchFinallyselesai. -
retryOnFailuremendapat nilai dari gagal.-
Jika gagal diatur ke nol, upaya coba lagi berhasil.
retryOnFailuretidak melakukan apa-apa, yang mengakhiri proses coba lagi. -
Jika gagal diatur ke objek pengecualian dan
shouldRetrymengembalikan BETUL,retryOnFailurememanggilcallActivityWithRetryuntuk mencoba kembali aktivitas.shouldRetrymengimplementasikan logika kustom untuk memutuskan apakah akan mencoba lagi aktivitas gagal. Untuk kesederhanaan,shouldRetryselalu mengembalikantruedanretryOnFailuremengeksekusi aktivitas segera, tetapi Anda dapat menerapkan logika yang lebih canggih sesuai kebutuhan.
-
-
Langkah 2-8 ulangi hingga
unreliableActivitymelengkapi ataushouldRetrymemutuskan untuk menghentikan proses.
catatan
doCatch tidak menangani proses coba lagi; itu hanya menetapkan gagal untuk menunjukkan bahwa aktivitas gagal. Proses coba lagi ditangani oleh metode retryOnFailure asinkron, yang menunda eksekusi sampai TryCatch selesai. Alasan untuk pendekatan ini adalah bahwa, jika Anda mencoba kembali aktivitas di doCatch, Anda tidak dapat membatalkannya. Mencoba kembali aktivitas di retryOnFailure mengizinkan Anda untuk melaksanakan kegiatan yang dapat dibatalkan.