2

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();
        });
}
4

1 に答える 1

2

しかし、Button1_Click が発生すると、ラムダ式内で未処理の例外が発生します

それは真実ではない。フレームワークがそれをキャッチするため、ユーザーコードによって処理されませんが、完全に処理されないわけではありません。アプリケーションの実行を続行して、例外が Button1_Click の catch によってキャッチされることを確認します。

于 2012-11-27T21:09:56.933 に答える