环境:C#,VS2010,.NET 4.0
我的错误信息如下。但是,如果我尝试再运行一次,那么它可以工作。我要检查它为什么会这样工作。你能评论一下吗?
错误讯息:
[9008]错误Form1 :: tplTest错误:MESASGE [发生一个或多个错误。]
[9008]消息来源[mscorlib]
[9008] TRACE [Location:System.Threading.Tasks.Task.WaitAll(Task [] tasks,Int32 millisecondsTimeout,CancellationToken cancellationToken)
代码段
private void tplTest(List<string> listFileNames)
{
try
{
var exceptions = new ConcurrentQueue<Exception>();
List<Task<TResult>> tasks = new List<Task<TResult>>();
foreach (string item in listFileNames)
{
Task<TResult> t_MethodA = Task.Factory.StartNew<TResult>(tpSharpness, item);
tasks.Add(t_MethodA);
}
try
{
Task.WaitAll(tasks.ToArray()); // <-- Error Occurred
foreach (Task<TResult> item in tasks)
{
if (item.IsCompleted)
{
TResult _result = item.Result;
// TODO Something
//...
}
}
}
catch (Exception e)
{
exceptions.Enqueue(e);
}
if (exceptions.Count > 0)
throw new AggregateException(exceptions);
}
catch (AggregateException exception)
{
foreach (Exception ex in exception.InnerExceptions)
log.AddErrorLog(this.Name, MethodBase.GetCurrentMethod().Name, string.Format("Error: MESASGE[{0}]\r\nSOURCE[{1}]\r\nTRACE[{2}]", ex.Message, ex.Source, ex.StackTrace));
}
}
private TResult tpSharpness(object arg)
{
SharpnessTask _tpSharp = new SharpnessTask();
return _tpSharp.Task();
}
答案 0 :(得分:0)
您需要抓住AggregateException
周围try catch
的{{1}}。这是抛出聚合异常的地方。
一旦捕获并处理了异常,您就可以转到代码的下一部分和Task.WaitAll(tasks.ToArray());
循环。