by Abs62 » Mon Dec 12, 2011 8:10 pm
Нет, из cancel() объектов не вызывается ничего. Там лишь выставляется флаг сброса - isCancelled.ref(). И всё, сразу возврат. А этот флаг проверяется в run(), которая вызвана из xxxRunnable.run(), то бишь работает в другом потоке. И обнаружив уже в своём потоке такой флаг, run() прерывает обработку и зовёт finish(), которая и дёргает finished(). Потому я и говорю, что был удивлён таким поведением - по уму вызов из другого потока должен был сам встать в очередь, без прямого на то указания.
Upd.
Хотя сейчас я ещё раз посмотрел - mediawiki (да и programs) действительно вызывает finish() из cancel(). Так что это оттуда мог прийти такой неприятный сюрприз.