3つの手順で完了する非同期操作を使用していますが、完了前に部分的な結果が返されます。もともとはイベントを使って進捗状況を知らせていましたので、私はそれをawait
できる操作(またはその連鎖)として適切にラップしたいと思います。複数のタスク<T>またはIProgress <T>を部分的に完了しましたか?
正確には、それは(該当する結果タイプを持つ)は、次の順序でイベントを発火のWindows Phone 7にPhotoCamera.CaptureImage方法です:
CaptureStarted
、私CaptureThumbnailAvailable
にその面白くありません(ストリーム)- (ストリーム)
CaptureCompleted
(BOOL)
CaptureImageAvailable
これをラップするには?現在、私はTaskCompletionSource
を使用しており、CaptureCompleted
にSetResult
を呼び出しています。 ではなく、の手順2と3を実行すると、サムネイルと画像が表示されます。代わりにコールバックを使うことにしました。
私の拡張メソッド(簡潔にするためのコードを除外):
public static Task<bool> CaptureImageAsync(this PhotoCamera photoCamera,
Action<Stream> thumbnailAvailableCallback,
Action<Stream> imageAvailableCallback)
これは、タスクとコールバックの混合物を完全にクリーンな感じはありません。私はIProgress<T>
を知っています。しかし、進捗値は均一なタイプ(ストリーム、ストリーム、ブール)ではなく... IProgress<T>
パターンが伸びすぎていませんか?
複数のTask<T>
を順番に使用することはオプションですが、それは何らかの形で強制しなければならない特定の順序を想定しています。たぶん、各タスクの結果は、メンバーとして「次」のタスクを含めることができます:
ThumbnailResult thumbnailResult = await photoCamera.CaptureImageAsync();
...
ImageResult imageResult = await thumbnailResult.NextTask;
...
bool finalResult = await imageResult.NextTask;
は、私はまだ、私はここにやや的外れだと思います。アイデア?