Я обнаружил, что использование переменных экземпляра в AsyncTask не является потокобезопасным. В моем случае, если бы я поймал и Exception в doInBackground (), я бы установил для него переменную экземпляра Exync в AsyncTask. Затем я бы проверил, была ли переменная нулевой или нет в onPostExecute () (я не отменяю (), потому что я могу захотеть отобразить сообщение в исключении для пользователя).
В любом случае, время от времени я регистрирую, что я перехватил исключение в doInBackground, но в onPostExecute переменная экземпляра будет нулевой. В документации сказано, что методы вызываются синхронно, поэтому я не могу объяснить ПОЧЕМУ это происходит, но я видел, как это происходило несколько раз.
Наконец, я изменил свой класс "Result", чтобы он содержал как исключение, так и исходный результат, который я хотел передать onPostExecute. Это прекрасно работает.