ThreadPoolExecutor.AfterExecute(IRunnable, Throwable) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Метод, вызываемый при завершении выполнения заданного runnable.
[Android.Runtime.Register("afterExecute", "(Ljava/lang/Runnable;Ljava/lang/Throwable;)V", "GetAfterExecute_Ljava_lang_Runnable_Ljava_lang_Throwable_Handler")]
protected virtual void AfterExecute (Java.Lang.IRunnable? r, Java.Lang.Throwable? t);
[<Android.Runtime.Register("afterExecute", "(Ljava/lang/Runnable;Ljava/lang/Throwable;)V", "GetAfterExecute_Ljava_lang_Runnable_Ljava_lang_Throwable_Handler")>]
abstract member AfterExecute : Java.Lang.IRunnable * Java.Lang.Throwable -> unit
override this.AfterExecute : Java.Lang.IRunnable * Java.Lang.Throwable -> unit
Параметры
запущенный объект, завершенный
исключение, вызвавшее завершение или значение NULL, если выполнение выполнено обычно
- Атрибуты
Комментарии
Метод, вызываемый при завершении выполнения заданного runnable. Этот метод вызывается потоком, выполняющим задачу. Если значение не равно null, то метод Throwable является неухваченным RuntimeException
или Error
что вызвало резкое завершение выполнения.
Эта реализация ничего не делает, но может быть настроена в подклассах. Примечание. Чтобы правильно вложить несколько переопределения, подклассы должны обычно вызываться super.afterExecute
в начале этого метода.
<b Примечание.</b>> Если действия заключены в задачи (напримерFutureTask
) явным образом или с помощью методов, таких какsubmit
, эти объекты задач перехватывают и поддерживают вычислительные исключения, поэтому они не вызывают резкого завершения, а внутренние исключения не>< передаются>< в этот метод. Если вы хотите захватить оба типа сбоев в этом методе, можно выполнить дополнительную проверку для таких случаев, как в этом примере подкласса, который печатает либо прямую причину, либо базовое исключение, если задача была прервана:
{@code
class ExtendedExecutor extends ThreadPoolExecutor {
// ...
protected void afterExecute(Runnable r, Throwable t) {
super.afterExecute(r, t);
if (t == null
&& r instanceof Future<?>
&& ((Future<?>)r).isDone()) {
try {
Object result = ((Future<?>) r).get();
} catch (CancellationException ce) {
t = ce;
} catch (ExecutionException ee) {
t = ee.getCause();
} catch (InterruptedException ie) {
// ignore/reset
Thread.currentThread().interrupt();
}
}
if (t != null)
System.out.println(t);
}
}}
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.