Task.Factory.StartNew抛出异常

时间:2012-04-02 11:27:51

标签: c# wpf

我正在使用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线程上的等待..

我怎样才能避免这种异常?

感谢。

1 个答案:

答案 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)
}