我在控制台应用程序中遇到了一个奇怪的问题(不确定这是否与它有关)并使用 Tasks。
大多数示例显示故意调用异常来测试/解释 WaitAll 的概念 - 但就我而言,似乎我在做一些根本错误的事情(或不完全理解)。
Task<int> task1 = Task<int>.Factory.StartNew(()=> foo(arg));
Task<int> task2 = Task<int>.Factory.StartNew(()=> bar(arg));
Task<int>[] tasks = {task1, task2};
try
{
Task.WaitAll(tasks); //hits this far
if((int)task1.Result * (int)task2.Result == 99) //this seems to never get hit
{
System.Environment.Exit(0); //so this isn't called
}
else
{
System.Environment.Exit(1); // neither is this called
}
}
catch
{
.....
在上面似乎if
没有命中该块,因此没有返回退出代码 - 因此控制台应用程序挂起。
也没有抛出异常 - 我可以确认这一点,因为实际上所有任务都已完成 - 为了简洁起见,我只是没有包括catch
上面的部分。
任务很快完成 - 它们没有挂起,所以它不像 Task.WaitAll 仍在等待 - 或者它可能是,这就是我错过的东西(它在等待什么)?
有什么想法、建议或残酷的更正吗?谢谢!