私にはやや重要な仕事があります。それをよりよく解決する方法について、あなたから聞いていただければ幸いです。一言で言えば、これはさまざまな性質の長期実行タスクを管理することです。これをWindowsPhoneで行っている間、C#および.NETの標準的なアプローチに基づいて、いくつかの一般的な原則をここに適用できると思います。
私のアプリケーションは主に、クラウド、GPS、商取引、認証などからのデータを処理するさまざまなサービスクラスを中心に構築されています。すべてのサービスは私たちのチームが所有しています。サービスはビューモデル内で使用されますが、さまざまなサービスのAPIは現在さまざまな方法で使用されています。どこか非同期/待機、どこかイベントベース(ポジショニングのように、地理座標を絶えず更新する必要があります)。
これで、アプリケーションのアクティブ化/非アクティブ化の問題を調査し始めました。これをすべてのビューモデルで共通の方法で処理したいと思います。主なことの1つは、アプリが閉じているとき、またはユーザーが別のページに移動したときに、現在の非同期操作をキャンセルすることです。コードの重複を避けるために、それに関連するコードをBaseViewModelのようなものに入れたいと思います。ただし、これは、すべてのビューモデルでキャンセルを均一に処理する必要があることを意味します。
ここに課題があります。たとえば、async/awaitのものはCancellationTokenによってキャンセルされる可能性があります。BaseViewModelですべてのキャンセルトークンを収集し、必要に応じてそれらをすべて使用することができました。ただし、これはイベントベースの非同期では機能しません。もちろん、仮想関数呼び出しを介して、具体的なキャンセル操作を子ビューモデルに委任することもできます。しかし、できるだけ多くのコードをBaseViewModelに移動したいと思います。
では、タスクのキャンセルとイベントベースの非同期を統合する方法はありますか?