コンソールアプリケーション(これがそれと関係があるかどうかわからない)とタスクの使用で奇妙な問題が発生しています。
ほとんどの例は、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がまだ待機しているかのようではありません-またはおそらくそれは私が見逃しているものです(何を待っていますか)?
何か考え、アドバイス、または残忍な修正はありますか?ありがとう!