Exception handling outside of Task

前端 未结 2 1280
余生分开走
余生分开走 2021-01-16 02:50

Just noticed strange thing: to catch exception in caller from new Task, lambda MUST be marked as async!? Is it really necessary even if delegate has no await operators at al

2条回答
  •  野的像风
    2021-01-16 03:51

    Methods that return Task - such as Task.Run or async methods - will place any exceptions on that returned Task. It's up to you to observe that exception somehow. Normally this is done with await, like this:

    await Task.Run(() => { throw ... });
    

    In your case, the problem is in this line:

    result = OnSomeEvent((s, ea) => RunSomeTask());
    

    In this code, RunSomeTask is returning a Task, and that Task is never awaited. In order to observe the exception, you should await that task.

提交回复
热议问题