【发布时间】:2016-09-28 14:19:21
【问题描述】:
我有一个 foreach 循环,可以创建多个这样的任务:
[编辑:CreateDisposableAsync 返回一个任务[IDisposable]]
foreach(...)
{
tasks.Add(CreateDisposableAsync());
}
然后我等待所有这些任务,并捕获任何异常:
try
{
await Task.WhenAll(tasks);
}
catch (AggregateException)
{
// handle exceptions
}
但是对 CreateDisposableAsync() 的调用会返回一个 IDisposable,无论任何任务中是否存在异常,我都希望将其处理掉。我该怎么做?
[编辑:事实证明,如果 CreateDisposableAsync() 函数抛出异常,它正在处理其创建的对象,因此原始代码没有任何问题。]
【问题讨论】:
-
tasks的类型是什么?你确定你需要处理吗? blogs.msdn.microsoft.com/pfxteam/2012/03/25/… -
最简单的方法是确保
CreateDisposableAsync清理自己的资源,以便负责处理它创建的任何需要处理的对象。 -
@LasseV.Karlsen 返回类型为Task
-
@Servy - 根据最新评论,我认为最简单的解决方案是让
CreateDisposableAsync调用在返回之前清理其自己的资源并返回Task而不是Task<IDisposable>。 -
如果你不使用结果,为什么该方法返回任何东西,也就是说,除了
Task?
标签: c#