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
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.