我有一个同步功能,例如以下函数产生IO错误(我删除了细节以简化):
public override void SyncFunction()
{
throw new IOException("test");
}
我以这种方式使用它:
try
{
await Task.Run(() => this.SyncFunction());
}
catch (Exception ex)
{
MessageBox.Show("Error:"+Environment.NewLine + ex.Message);
}
但是当我运行应用程序时,catch块没有被调用,但是我收到一条消息,表明应用程序崩溃了。有什么问题,我该如何解决?
答案 0 :(得分:2)
你所描述的代码应该处理异常就好了。
然而, 会使您的应用程序崩溃的事情是async void
方法中抛出的异常,因为异常没有Task
存储在其中。
所以,我的猜测是SyncFunction
看起来更像是这样:
public override async void SyncFunction()
{
throw new IOException("test");
}
当你调用它时,异常会发布到ThreadPool
线程并导致应用程序崩溃。
如果是这种情况,请不要使用async void
,除非在UI事件处理程序中,并确保通过注册AppDomain.CurrentDomain.UnhandledException
事件来处理此类异常。