2017-04-20 14 views
3

Task.Factory.StartNew 메서드에 의해 throw 될 NullReferenceException을 catch하려고합니다. 나는 그것이 task.Wait() 메소드로 'try'문장에 의해 잡혀 야한다고 생각한다. 나는 또한 Why is this exception not caught?을 언급했으나 전혀 모른다. 너 지혜를 나누 겠니?AggregateException이 Task.Wait()에 걸리지 않았습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 
using System.Threading; 
using System.Threading.Tasks; 

namespace Csharp_study 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Task my_task = Task.Factory.StartNew(() => { throw null; }); 
      try 
      { 
       my_task.Wait(); 
      } 

      catch (AggregateException exc) 
      { 
       exc.Handle((x) => 
        { 
         Console.WriteLine(exc.InnerException.Message); 
         return true; 
        }); 
      } 

      Console.ReadLine(); 
     } 
    } 
} 

답변

2

이 문제는 VS의 디버거 및 사용자 코드로 인한 것입니다.

디버그 모드에 있고 내 코드 (대부분의 언어의 기본 설정)을 사용하는 경우이 기능을 해제해야합니다.

내 코드만으로 기능을 사용하지 않으려면 도구> 옵션> 디버깅> 일반으로 이동하고 내 코드 만 확인란의 선택을 취소하십시오.

내 코드 기능 만 사용하는 것이 궁금하신 분은 msdn의 발췌 부분을 참조하십시오. 이 기능이 활성화되면

이 내 코드 만 사용
, 사용자 코드 ("내 코드")에 디버거 표시 및 단계는, 시스템을 최적화 코드와 다른 코드를 무시하는 것은 또는 그이 없습니다 디버그 기호.

+1

감사합니다. 사실 저는 아래의 의견을 들었을 때 3 개월 전에 답을 찾았습니다. 그러나 나는 그 질문을 끝내는 길을 찾을 수 없었다. 그래서 나는 당신을 하나의 것으로 표시합니다. 좋은 하루 되세요! –

1

작업에 대한 예외를 처리하려면 오류가 있는지 확인하십시오. 오류가 발생하지 않으면 실행을 계속하십시오. 방법은 반환 형식을 가지고 있지 않는 한

static void Main(string[] args) 
     { 
      Task my_task = Task.Factory.StartNew(() => { throw null; }); 

      my_task.ContinueWith(x => 
      { 

       if (my_task.IsFaulted) 
       { 
        Console.WriteLine(my_task.Exception.Message); 

       } 
       else { 
        //Continue with Execution 
       } 
      }); 
     } 

그리고 return true;이 경우 유효하지 않습니다.

+0

안녕하세요. 귀하의 솔루션에 감사드립니다. 이것은 의미가 있지만 예외를 처리 할 수있는 다른 방법이 있습니까? 기존의 예외 처리 문을 사용하는 것과 같습니다. 또한 [MSDN] (https://msdn.microsoft.com/en-us/library/system.aggregateexception (v = vs.110) .aspx)을 참조하고 있지만 Task를 사용하여 예외를 catch 할 수도 있습니다. 기다림(). –

+0

위에서 계속해서, 나는 또한 당신의 솔루션을 시도했지만 여전히 '처리되지 않은'이라는 동일한 예외가 발생하고 코드가 예외를 처리하지 않는 것처럼 보입니다. –

+0

작업을 할 때 오류가 있고 위의 코드가 제대로 작동하면 상태를 확인해야합니다. 전체 코드가 있습니까? – Simsons