2022年5月7日土曜日

非同期の同期

 UIアプリ作っていると非同期処理は非同期だけど同期したいことが多い。

通常の非同期処理は例えばサーバでリクエスト受付てスレッド作ってポンポン動かす感じ。

UIアプリでは非同期というよりは固まらないように別スレッドで動かしたいだけ。処理は同期したい。Thread.SleepではなくTask.Delayによる同期。そんなときは言語によるがC#の場合はasync/await使う。

注意点は一つのメソッドを非同期で同期awaitしたい場合は親メソッドも非同期asyncとなっていないといけないということ。これとても重要。例えで

背中に亀を乗せている亀もまた別の亀の背中に乗っている。

という表現がある。要は関連するメソッドを全て非同期asyncにしてよってこと。親メソッドをasyncに修正できないときは別のタスクを用意するなどちょっと面倒だ。

0 件のコメント:

コメントを投稿