3 つのステップで完了し、完了する前に部分的な結果を返す非同期操作を使用しています。await
もともとはイベントを使用して進行状況を通知していましたが、可能な操作 (またはそれらのチェーン)として適切にラップしたいと考えています。
正確には、Windows Phone 7 の PhotoCamera.CaptureImage メソッドであり、次の順序でイベントを発生させます (関連する結果の種類を使用)。
CaptureStarted
、私にはそれほど興味深いものではありませんCaptureThumbnailAvailable
(ストリーム)CaptureImageAvailable
(ストリーム)CaptureCompleted
(ブール値)
これどうやって包むの?現在、私は を使用してTaskCompletionSource
を呼び出しSetResult
ていCaptureCompleted
ます。サムネイルと画像が利用可能になる手順 2 と 3 については説明しません。代わりにコールバックを使用することにしました。
私の拡張方法(簡潔にするためにコードを省略):
public static Task<bool> CaptureImageAsync(this PhotoCamera photoCamera,
Action<Stream> thumbnailAvailableCallback,
Action<Stream> imageAvailableCallback)
タスクとコールバックが混在しているため、これは完全にクリーンではありません。私は知っていIProgress<T>
ます。ただし、進行状況の値は均一な型 (Stream、Stream、bool) ではありません...そして、IProgress<T>
パターンが伸びすぎませんか?
Task<T>
順番に待機している複数を使用することはオプションですが、それは、何らかの方法で強制する必要がある特定の順序を想定しています。おそらく、各タスクの結果には、メンバーとして「次の」タスクが含まれる可能性があります。
ThumbnailResult thumbnailResult = await photoCamera.CaptureImageAsync();
...
ImageResult imageResult = await thumbnailResult.NextTask;
...
bool finalResult = await imageResult.NextTask;
私はまだここでやや的外れだと思っています。アイデア?