我正在使用Task.Factory.StartNew从UI线程中调用长处理服务。但是,一旦加载应用程序,我就会收到以下异常
通过等待Task或访问其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线程上的等待..
我怎样才能避免这种异常?
感谢。
答案 0 :(得分:1)
作为第一个解决方法/ debugging-help将lock (...)
包裹在try-catch
内并在catch
- Block内设置断点 - 这样你就能看到问题< / p>
对于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)
}