3
我有一个链接任务2使用类似这样的地方任务1初始化,并返回一个IDisposable
对象的场景:如何正确处理一次性任务结果?
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() { ... }
这样的一些众所周知的模式来做到这一点?
不能使用await关键字吗? – Olivier
不,它是.NET4代码 – metalheart
@metalheart:您仍然可以使用Microsoft.Bcl.Async程序包在.NET 4中使用async/await。您确实需要C#5编译器(VS2012或更高版本)。 –