次のコードがあります
var exceptions = new ConcurrentQueue<Exception>();
Task task = Task.Factory.StartNew(() =>
{
try
{
Parallel.Invoke(
async () => await _aViewModel.LoadData(_someId),
async () => await _bViewModel.LoadData(_someId)
);
}
catch (Exception ex)
{
exceptions.Enqueue(ex);
}
}).ContinueWith((continuation) =>
{
if (exceptions.Count > 0) throw new AggregateException(exceptions);
});
ここで Task.StartNew を使用しているのは、LoadData メソッドが Dispatcher.StartAsync メソッドを使用してメイン UI スレッドを内部的に呼び出すためです。
私が抱えている問題は、強制_aViewModel.LoadData
的に例外をスローした場合、それが Catch(Exception) 句でキャッチされないことです (また、AggregateException をキャッチした場合も)。なぜだか分からない!?