Task.Factory.StartNew出现异常

本文关键字:异常 StartNew Factory Task | 更新日期: 2023-09-27 18:29:47

我正在使用Task.Factory.StartNew使长处理服务调用离开UI线程。然而,当我加载应用程序时,我会得到以下异常

等待任务或访问其exception属性都没有观察到任务的异常。因此,终结器线程重新引发了未处理的异常。

Task.Factory.StartNew(() => this.InitializeViewModel(myViewModel));
private void InitializeViewModel(IModel myViewModel)
{
    lock (viewModelLock)
    {
        myViewModel.MyContext = this.MyContext; // this will set the MyContext property which in turn makes some service calss
    }
}

这里我不能使用task.wait()b'coz,那么它将导致UI线程上的等待。。

我该如何避免这种异常情况??

谢谢。

Task.Factory.StartNew出现异常

作为第一个解决方法/调试帮助将lock (...)封装在try-catch中,并在catch-块中设置断点-这样您应该能够看到问题

对于Task.Wait的问题,您可以使用ContinueWith方法来获取异常:

var task = Task.Factory.StartNew(() => this.InitializeViewModel(myViewModel));
task.ContinueWith(o => MyErrorHandler(task.Exception), TaskContinuationOptions.OnlyOnFaulted);

不要忘记处理程序:

void MyErrorHandler(Exception error)
{
 // handle the exception (log, or whatever)
}