async/awaitソリューションを無視すると、これらの2つのコードセットに違いはありますか?この場合、Task.WaitAllが本当に必要でしょうか?それを省略することに否定的な結果があるだろうか?Task.WaitAllとシリアル化されたtask.results?
public void ExampleA()
{
Task<object> fooTask = _someFactory.StartFooTask();
Task<object> barTask = _someFactory.StartBarTask();
//misc code ...
_fooResult = fooTask.Result;
_barResult = barTask.Result;
//more misc code ...
}
public void ExampleB()
{
Task<object> fooTask = _someFactory.StartFooTask();
Task<object> barTask = _someFactory.StartBarTask();
//misc code ...
Task.WaitAll(fooTask, barTask);
_fooResult = fooTask.Result;
_barResult = barTask.Result;
//more misc code ...
}
exampleAは、特に場合は、私にはさらに多くの理にかなって、1タスクの結果として起こる可能性があり、いくつかのより多くを計算後、すぐに他の人を必要とするかもしれないがあるかもしれませんどこ?偶然に必要なものがあれば、実際には早く終了する。論理的に
public void ExampleC()
{
Task<object> fooTask = _someFactory.StartFooTask();
Task<object> barTask = _someFactory.StartBarTask();
//misc code ...
_fooResult = fooTask.Result;
// more misc code requiring _fooResult ...
_barResult = barTask.Result;
// more misc code requiring _barResult...
}
私が「WaitAll」で見る1つの問題は、いずれかのタスクに例外がある場合は、AggregateExceptionをスローします。 'ExampleA'では、例外を投げたタスクが分かっていて、それらを別々に処理する仕組みを持つことができます。 –