Microsoft のマルチスレッド フレームワークの代わりにタスクを使用するようにアプリケーションを変換しようとしていますが、エラー処理に問題があります。Microsoft のドキュメント ( http://msdn.microsoft.com/en-us/library/vstudio/0yd65esw.aspx ) から、以下の try-catch が例外をキャッチすることを期待します。
private async void Button1_Click()
{
try
{
object obj = await TaskFunctionAsync()
}
catch(Exception ex)
{}
}
public Task<object> TaskFunctionAsync()
{
return Task.Run<object>(() =>
{
throw new Exception("foo");
return new object();
});
}
しかし、Button1_Click が発生すると、ラムダ式内で未処理の例外が発生します。例外を try-catch に入れる方法はありますか? この種のエラー処理 (タスク ワーカー スレッドからマーシャリングする必要がないため) は、Task フレームワークの主な利点の 1 つだと思いました。
私も試しました:
public async Task<object> TaskFunctionAsync()
{
return await Task.Run<object>(() =>
{
throw new Exception("foo");
return new object();
});
}