ASyncTaskでキャンセルするとき
キャンセル処理自体に時間がかかる場合ってどのようにされていますか?

#cancel(true)を呼び出すと
#onCancelled()がUIスレッドで呼び出されますが、
その間も、#doInBackground()は動作し続けてます。
終了処理中もProgressDialogは表示していたいので、
#onCancelled()でダイアログは閉じたくありません。

なので、#doInBackground()の処理完了後にダイアログを閉じたいのですが
#cancel(true)を呼び出した後は、#doInBackground()の処理完了後に
#onPostExecute()が呼び出されないのです。

ネットで検索しても、ASyncTaskのキャンセル処理を実装してるサンプルがあまり見つからないのですが、
皆さんはどのようにされているのでしょうか?