작품 미세 (오히려 CTP 이상은, 따라서 TaskEx
는 Task
되고) :
using System;
using System.Threading.Tasks;
class Test
{
static void Main()
{
Task t = Foo();
t.Wait();
}
static async Task Foo()
{
try
{
await Task.Run(() => { throw new Exception(); });
}
catch (Exception e)
{
Console.WriteLine("Bang! " + e);
}
}
출력 :
같은 코드가 컴퓨터에 않는 무엇을
Bang! System.Exception: Exception of type 'System.Exception' was thrown.
at Test.<Foo>b__0()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter
.HandleNonSuccessAndDebuggerNotification(Task task)
at Test.<Foo>d__2.MoveNext()
?
허. 네가 CTP에도 적합하다고 생각해. Visual Studio 2010의 비동기 코드 디버깅 지원에 혼란 스러웠습니다. VS는 예외가 처리되지 않았 음을 알려주지 만 계속 실행하면 바깥 쪽 catch 블록이 결국 catch합니다. – Greg
Sigh! VS가 예외가 처리되지 않았다고 주장하는 작업/비동기 언급에 대한 어떤 문헌도없는 이유는 무엇입니까? –
이것은 나에게 너무 짜증나. VS2012에서도 여전히 동일합니다. 계속해서 실행하면 제대로 잡을 것입니다. 디버깅 만이 나를 포기합니다. 감사! – YnotDraw