如何正确处理一次性任务结果?

时间:2014-01-14 13:37:09

标签: .net task-parallel-library

我有一个场景,其中Task1初始化并返回一个IDisposable对象,以便在链接的Task2中使用,如下所示:

Task.Factory.StartNew<Stream>(() =>
{
    // open and write stream
})
.ContinueWith(prevTask => 
{
    var stream = prevTask.Result;  // possible AggregateException
    // read stream and close it
});

问题是:如何正确处理物体?一个有趣的案例可能是:Task1打开+读取流,然后发生异常,在Task2中重新抛出,因此Task2将看不到仍然打开的原始流。

是否有一些众所周知的模式,如using () { ... }来做这件事?

1 个答案:

答案 0 :(得分:0)

正如评论中所提到的,您正在寻找使用await关键字调用的模式。 重新引发异常的原因是因为您正在访问prevTask.Result。如果您先拨打prevTask.IsFaulted,那么您将能够做出反应而不会重新抛出异常。