작업 내에서 발생하는 예외를 관찰하는 데는 여러 가지 방법이 있습니다.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 번 관찰 될 수 있나요 그 중 하나는 OnlyOnFaulted와 ContinueWith에?
당신이 무엇을 의미합니까? ContinueWith 대리자는 예외 개체에 액세스하는지 여부에 관계없이 한 번만 호출됩니다. –
아마도 "t.Exceptions'에 액세스하지 않고 단순히 'OnlyOnFaulted'를 호출하면 예외가 다시 발생합니까? – user7116
Tasks에서 Throw 된 예외 ("Microsoft 용어")를 "관찰"하지 않으면 가비지 수집기에서 나중에 예외를 throw합니다. 내 ContinueWith 대리자가 반드시 여러 번 호출 될 수 있습니다 (주 작업 내에서 여러 작업이 예외를 throw하는 경우) ... 또는 모든 예외가 발생한 AggregateException 트리가 호출 될 수 있습니까? – davenewza