我有一个场景,其中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 () { ... }
来做这件事?
答案 0 :(得分:0)
正如评论中所提到的,您正在寻找使用await
关键字调用的模式。
重新引发异常的原因是因为您正在访问prevTask.Result
。如果您先拨打prevTask.IsFaulted
,那么您将能够做出反应而不会重新抛出异常。