العمليات طويلة الأمد (LRO)

تؤدي الطلبات المتعددة بواجهة برمجة التطبيقات إلى ظهور عمليات طويلة الأمد. تتتبّع هذه الحالة الحالة لوظيفة يتم تنفيذها على مدار فترة زمنية طويلة، كإجراء حظر استدعاء إجراء عن بُعد (RPC) غير مرغوب فيه.

فئة OperationFuture

وتتمثل الطريقة الأكثر وضوحًا للتفاعل مع LROs في صف واحد (OperationFuture). في حال استخدام هذا، يُرجى التأكد من عدم تلف عميل الخدمة.

صيغة غير محبَّذة:

private void doSomething() {
  OperationFuture<Empty, Empty> future = startLongRunningOperation(jobName);
  future.get();
}

private OperationFuture<Empty, Empty> startLongRunningOperation(String jobToStart)
    throws UnsupportedEncodingException {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient.getLatestVersion().createOfflineUserDataJobServiceClient()) {
    // Issues an asynchronous request to run the offline user data job for executing
    // all added operations.
    return offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(jobToStart);
  }
}

إجراءات ننصح بها:

private void doSomethingElse() {
  try (OfflineUserDataJobServiceClient offlineUserDataJobServiceClient =
      googleAdsClient.getLatestVersion().createOfflineUserDataJobServiceClient()) {
    OperationFuture<Empty, Empty> future = startLongRunningOperation(offlineUserDataJobServiceClient, jobName);
    future.get();
  }
}

private OperationFuture<Empty, Empty> startLongRunningOperation(String jobToStart)
    throws UnsupportedEncodingException {
    offlineUserDataJobServiceClient.runOfflineUserDataJobAsync(jobToStart);
}

لاحظ كيف تُستخدَم فئة OperationFuture فقط OfflineUserDataJobServiceClient ضمن النطاق.