Task.Factory.StartNew异常触发的异常
我使用Task.Factory.StartNew使长处理服务调用关闭UI thread.However,我收到follwing例外,只要我加载应用程序,Task.Factory.StartNew异常触发的异常
通过等待任务或访问其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线程等待..
我怎样才能避免这种例外?
谢谢。
作为第一个解决方法/调试的帮助包住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)
}
我正在使用ContinueWith,它没有抛出错误,它是处理它的正确方式,还是我应该写一些不会抛出异常的指令。请指导 – 2012-04-02 12:00:01
我使用类似这样的事情来记录意外错误,并且是我认为这是处理这个问题的一种方式 - 但是当然你应该编写代码来处理错误 – Carsten 2012-04-02 12:01:54
那个调用'Task.Factory.StartNew'的地方在哪里? – leppie 2012-04-02 11:38:53
您应该查看该异常的'InnerExcpetion'并修复它,而不是试图忽略它。 – svick 2012-04-02 11:43:40