YAMADA TAISHI’s diary

ゲームについてとか私の日記とか。このブログのあらゆるコードは好きにどうぞ。利用規約があるものは記事内のGitHubのRepositoryのリンクで貼られていると思うので、そちらを参照ください。

【メモ書き】UniTaskでキャンセルが伝播してしまうのを避ける

こんにちは、やまだたいし( https://twitter.com/OrotiYamatano )です。
UniTaskのキャンセルについて。

目次


SuppressCancellationThrowを使え


UniTaskではキャンセルした時に OperationCanceledException というExceptionで処理をします。
しかし、その場合キャンセルが伝播してしまい、一番親の呼び元までキャンセルしにいってしまいます。

それを避けるためには SuppressCancellationThrow を使うとよいです。

例えば、こんな感じ。

await UniTask.WaitWhile(() =>hoge, cancellationToken: token) .SuppressCancellationThrow();

こうすることで await UniTask.WaitWhile のところで止まるので更に上位の await UniTask.WaitWhile を呼び出している階層は巻き込まれずに済みます。

まとめ


これだけ。
これだけなので記事にするか迷いましたが、ググる人もいるかと思ったので記事化しました。

詳しくは、はなちるさんの記事とか他の人がわかりやすい記事書いているので見るとよいかも。

www.hanachiru-blog.com