非同期のAPIを作成するときに利用できる便利なイディオムはありますか?全体を通していくつかの異なるスタイルを使用しているように見えるので、何かを標準化したいと思います。非同期コードを単純にするのは難しいようです。これは、非同期操作が何でもないためだと思います。
最も基本的なレベルでは、APIのユーザーは次のことができる必要があります。
- データが利用可能になったら、データをプッシュしてもらいます
- 非同期操作のステータスを確認する
- 発生したエラーが通知されます
- 完了するのを待ちます(非同期操作を同期操作に変換します)
私のクラスはいくつかの非同期操作をサポートしています。私はその周りのクラスにいくつかのステータス/エラーコールバックを入れてきましたが、クラスは多くの付随的なフィールドでガンガンになり、大きくなりすぎています。誰かが非同期APIを使用したことがあるかどうか、私は興味があります。.NETのBegin/EndAsyncOperation + AsyncResultデザイン、およびJavaのいくつかのクラス(Futureなど)を見てきました。
これはPythonで記述されているため、非常に柔軟性があります。注意点があります。これらの非同期操作の一部は、リモートマシンにマーシャリングされ、そこで実行されます。したがって、すべての操作が必ずしも別のスレッドで実行されるわけではありません。