我正在使用分三步完成的异步操作,在完成之前返回部分结果。最初它使用事件来表示进度,我想将它正确地包装为一个await
能够操作(或它们的链)。
确切地说,它是 Windows Phone 7 中的 PhotoCamera.CaptureImage 方法,它按以下顺序触发事件(具有相关的结果类型):
CaptureStarted
,对我来说没那么有趣CaptureThumbnailAvailable
(溪流)CaptureImageAvailable
(溪流)CaptureCompleted
(布尔)
这个怎么包?目前我正在使用 a并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;
我仍然认为我在这里有些不合时宜。想法?