안녕하세요~
원하시는대로는 Task에서 나온 예외를 잡을 수 없습니다…
2가지 정도 방법이 떠올라서 전달 드립니다.
await를 붙이면 예외를 잡을 수 있습니다.
비동기 코드지만 동기 코드처럼 catch할 수 있습니다.
private async void button1_Click(object sender, EventArgs e)
{
try
{
await TaskFuncAsync();
}
catch (Exception ex)
{
}
}
private async Task TaskFuncAsync()
{
await Task.Run(() =>
{
throw new Exception("e");
});
}
Task에 ContinueWith()를 사용한다.
Task객체가 끝난 후 반환값을 확인하는 방법입니다.
개인적으론 await 등장전엔 이 방법을 자주 사용했지만 await 등장 후 잘 사용하지 않는 패턴입니다.
private void button3_Click(object sender, EventArgs e)
{
TaskFunc().ContinueWith(x =>
{
if (x.Exception != null)
{
// 예외가 있으면 여기 잡힘
}
});
}
private Task TaskFunc()
{
return Task.Run(() =>
{
throw new Exception("e");
});
}
이 방법이 아니라면… 함수를 호출하는 측에서 예외를 처리 하는 것이 아니라
직접 함수 안에서 try-catch
를 사용하는 방법이 있을 것 같습니다.
도움이 되셨으면 좋겠네요!