source

작업 대기 또는 예외 속성에 액세스하여 작업 예외가 관찰되지 않았습니다.그 결과 관찰되지 않은 예외는

nicesource 2023. 4. 9. 21:42
반응형

작업 대기 또는 예외 속성에 액세스하여 작업 예외가 관찰되지 않았습니다.그 결과 관찰되지 않은 예외는

이것은 무엇을 의미하며 어떻게 해결할 것인가?

TPL 태스크를 사용하고 있습니다.

모든 오류

작업 대기 또는 예외 속성에 액세스하여 작업 예외가 관찰되지 않았습니다.그 결과 관찰되지 않은 예외가 피니셔 스레드에 의해 다시 검출되었습니다.

를 클릭합니다.스레드화Tasks.TaskExceptionHolder.Finalize()

mscorlib

태스크를 생성했는데도 호출을 하지 않는 경우task.Wait()또는 의 결과를 취득하려고 합니다.Task<T>가비지 컬렉터에 의해 태스크가 수집되면 최종 처리 중에 응용 프로그램이 해체됩니다.상세한 것에 대하여는, 「TPL 의 예외 처리」의 MSDN 페이지를 참조하십시오.

여기서 가장 좋은 방법은 예외를 "처리"하는 것입니다.이 작업은 계속을 통해 수행할 수 있습니다. 계속을 태스크에 연결하고 발생한 예외를 기록/삭제/등할 수 있습니다.이를 통해 작업 예외를 간편하게 기록할 수 있으며 다음과 같은 간단한 확장 방법으로 작성할 수 있습니다.

public static void LogExceptions(this Task task)
{
    task.ContinueWith( t =>
    {
         var aggException = t.Exception.Flatten();
         foreach(var exception in aggException.InnerExceptions)
             LogException(exception);
    }, 
    TaskContinuationOptions.OnlyOnFaulted);
}

위와 같이 하면 다음과 같은 방법으로 작업이 앱을 해체하고 기록하는 것을 방지할 수 있습니다.

Task.Factory.StartNew( () => 
   { 
       // Do your work...
   }).LogExceptions();

또는 TaskScheduler를 구독할 수 있습니다.Unverved Task Exception 및 거기서 처리합니다.

물론입니다.Task가비지 컬렉션에 맡겨진 후 완료되었지만 작업 자체는 실패했습니다.다음 두 가지 수정이 있습니다.

  • 작업을 직접 처리하다(사용하다)ContinueWith(...)구독 및 확인하다.IsFaulted그리고..Exception에서Task파라미터에 포함)
  • 을 처리하다TaskScheduler.UnobservedTaskException이벤트 및 관찰된 마킹(콜)e.SetObserved()에러를 기록한 후)

언급URL : https://stackoverflow.com/questions/7883052/a-tasks-exceptions-were-not-observed-either-by-waiting-on-the-task-or-accessi

반응형