כמה קריאות ל-Google Ads API מחזירות פעולות ממושכות (LRO). הן עוקבות אחרי הסטטוס של משימה שמתבצעת לאורך זמן, בלי לדרוש RPC חוסם אחד.
הכיתה OperationFuture
כדי לבצע אינטראקציה עם פעולות ארוכות בספריית הלקוח של Java, משתמשים במחלקה OperationFuture. מכיוון ש-OperationFuture מסתמך על לקוח השירות הבסיסי כדי לדגום את ה-API לקבלת עדכוני סטטוס, חשוב לוודא שלקוח השירות נשאר פתוח ופעיל עד להשלמת הפעולה.
לא מומלץ:
private void executeOperation(String jobName) throws Exception {
OperationFuture<Empty, OfflineUserDataJobMetadata> future =
startLongRunningOperation(jobName);
// FAILS: The service client was already closed when
// startLongRunningOperation() exited its try-with-resources block, so
// future.get() fails when polling.
future.get();
}
private OperationFuture<Empty, OfflineUserDataJobMetadata>
startLongRunningOperation(String jobToStart) {
try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
googleAdsClient
.getLatestVersion()
.createOfflineUserDataJobServiceClient()) {
// Issues an asynchronous request to run the offline user data job.
return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(
jobToStart);
}
}
מומלץ:
private void executeOperation(String jobName) throws Exception {
try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
googleAdsClient
.getLatestVersion()
.createOfflineUserDataJobServiceClient()) {
OperationFuture<Empty, OfflineUserDataJobMetadata> future =
startLongRunningOperation(offlineUserDataJobServiceClient, jobName);
// Waits for the operation to complete (with a timeout) while the client is
// still open.
future.get(5, TimeUnit.MINUTES);
}
}
private OperationFuture<Empty, OfflineUserDataJobMetadata>
startLongRunningOperation(
OfflineUserDataJobServiceClient offlineUserDataJobServiceClient,
String jobToStart) {
return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(jobToStart);
}
שימו לב שמשתמשים ב-OperationFuture רק בזמן ש-OfflineUserDataJobServiceClient נשאר פתוח בתוך הבלוק try-with-resources.