タスク内で発生した例外は、Wait()またはResult呼び出し時に放出される。例外はAggregateExceptionに集約されて、それがスローされる。
コード例1
public class ThrowErrorSample
{
public static void Run()
{
var task = Task.Factory.StartNew(() =>
{
Thread.Sleep(500);
throw new Exception("なんらかのエラー");
});
try
{
task.Wait();
}
catch (AggregateException exc)
{
foreach (var innnerExc in exc.InnerExceptions)
{
Console.WriteLine("エラー:" + innnerExc.Message);
}
}
}
}
コード例2 (await使用)
class Program
{
static void Main(string[] args)
{
ThrowErrorSample2.Run();
Console.ReadLine();
}
}
public class ThrowErrorSample2
{
public static async void Run()
{
var task = Task.Factory.StartNew(() =>
{
Thread.Sleep(500);
throw new Exception("なんらかのエラー");
});
try
{
await task;
}
catch(Exception e)
{
//発生したException自体がスローされてくる
Console.WriteLine("エラー:" + e.Message);
}
}
}