キュアジャン開発記録-非同期処理がうまく実装できない件(続き)-
先日の、こちらのエントリについてですが、Twitterのフォロワーさんのアドバイスで無事解決することができました。
nulluo.hatenablog.comエラーの原因は「XMLファイルをオープンせずにデータを取り出そうとしていた」という非常に初歩的なウッカリでした。お騒がせした皆さんすみません。
さて、非同期処理によるオンラインアップデート機能については、参考にしたコードがVisual Studio2005時代の古いコードであり、VB6時代の空気が色濃く残ったコードでした。(モジュールにグローバル変数を宣言してるとか、色んな所でオブジェクト指向設計があまり意識されてない感じでした)
そこで、もう少し現代のコードに近づけようと思って、クラス設計を整理し、グローバル変数を廃止するなどの改善を行いました。
改善後のクラス図
他にもAsyncの使い方で不適切なところがありました。戻り値を返さないAsyncメソッドを定義していたのですが、「基本的にイベントハンドラ以外はAsync Subにするのダメ。呼び出し元が処理終了の検知できないから。」というのを教わって、その点も修正しました。
参考:neue cc - asyncの落とし穴Part3, async voidを避けるべき100億の理由
上記の改善後、コードはこんな感じになりました。
Async, Await のキーワードはすごく便利ですね!本来なら非同期処理終了後のコールバック処理をラムダ式書いてまとめなきゃいけないところを、Await HogeSync~と書けば、その後の処理が全てコールバック処理としてTaskに登録されるとか、記述のシンプルさに感動しました。
とはいえ、まだ非同期処理の中でも単純なパターンしかやっていない感はあるので更に濃い理解を今後深めていきたいです。