Как использовать блок try catch в методах Page.RegisterAsyncTask

1

У меня есть следующий код для запуска асинхронного вызова. Я пытаюсь захватить исключение таймаута базы данных и показать какое-то удобное для пользователя сообщение.

Но, поставив try, catch block in endInvoke, action не выполняется. Я использую ASP.Net 4.0 и С# 4.0

Page.RegisterAsyncTask(new PageAsyncTask(new BeginEventHandler(beginMyMethod)
      , new EndEventHandler(endMyMethod), new EndEventHandler(timeout => { })
      , true, true));
Page.ExecuteRegisteredAsyncTasks();

затем

IAsyncResult beginMyMethod(object sender, EventArgs e, AsyncCallback cb, object state)
{
        Action r = myMethod;
        return r.BeginInvoke(cb, state);
}


void endMyMethod(IAsyncResult asyncResult)
{
  try{
   myObj.Property // gives object reference error, as it was not set, since DB timeout

  }
  catch(MyTimeoutException ex){
   //it is not getting called
  }
}


private void MyMethod()
{
 try{
   MyObject myObj= //making a database call causes DB time out error
 }
 catch(MyTimeoutException ex){
    //it is getting called
 }
}

Как использовать блок try catch в методах Page.RegisterAsyncTask

Примечание. Я хочу предотвратить ошибку ссылки объекта с тайм-аутом db и асинхронную работу

Теги:
asynchronous

1 ответ

1
Лучший ответ

Вы говорите, что myObj.Property приводит к NullReferenceException. Почему вы ожидаете поймать его с помощью catch (MyTimeoutException)?

Вы используете шаблон APM. Это требует вызова метода EndXxx для получения результата операции, получения каких-либо исключений и потенциального выпуска ресурсов. Вызовите метод EndXxx.

  • 0
    Ты прав. Я могу поймать исключение в оригинальном методе. Но, однако, мне нужно проверить нулевое значение, прежде чем получить доступ в endXXX .
  • 0
    Так почему бы тебе не сделать это?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню