Task.Factory.StartNew thowing исключение - PullRequest
2 голосов
/ 02 апреля 2012

Я использую 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, тогда это вызовет ожидание в потоке пользовательского интерфейса ..

как мне избежать этого исключения ??

Спасибо.

1 Ответ

1 голос
/ 02 апреля 2012

в качестве первого решения для обхода / отладки оберните ваш 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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...