11

タスク内でスローされた例外を観察するには、さまざまな方法があります。それらの 1 つは、OnlyOnFaulted の ContinueWith にあります。

var task = Task.Factory.StartNew(() =>
{
    // Throws an exception 
    // (possibly from within another task spawned from within this task)
});

var failureTask = task.ContinueWith((t) =>
{
    // Flatten and loop (since there could have been multiple tasks)
    foreach (var ex in t.Exception.Flatten().InnerExceptions)
        Console.WriteLine(ex.Message);
}, TaskContinuationOptions.OnlyOnFaulted);

私の質問: 例外は、failureTask が開始されると自動的に監視されるようになりますか、それとも ex.Message に「触れる」とのみ監視されるようになりますか?

4

2 に答える 2

10

プロパティにアクセスすると、観察されたように表示されExceptionます。

も参照してくださいAggregateException.Handle。代わりに使用できますt.Exception.Handle

t.Exception.Handle(exception =>
            {
            Console.WriteLine(exception);
            return true;
            }
    );
于 2012-07-31T15:52:50.007 に答える
2

サンプル

Task.Factory.StartNew(testMethod).ContinueWith(p =>
            {
                if (p.Exception != null)
                    p.Exception.Handle(x =>
                        {
                            Console.WriteLine(x.Message);
                            return false;
                        });
            });
于 2013-06-04T14:47:56.263 に答える