IsCompletedSynchronously для RegisterasyncTask - PullRequest
1 голос
/ 07 июля 2011

Я использую RegisterAsyncTask, чтобы выполнить некоторые операции ввода-вывода на странице aspx. У меня есть 2 вопроса относительно того же.

1) Что произойдет, если я выполню операцию ввода-вывода в OnBeginEvent и BeginfXXX retrun синхронно (IAsyncResult.CompletedSynchronouslt = true). Будет ли вызываться обработчик OnEnd.

Я только что проверил это, создав фиктивную реализацию IAsyncResult, и кажется, что ни один из обработчиков OnEnd не вызывается, и рендеринг страницы не завершается (пока не произойдет событие timeout). Что делать в таких случаях?

2) Вопрос в том, что соответствует первому. Допустим, я зарегистрировал мою асинхронную задачу. В обработчике ONBegin я выполняю некоторые предварительные шаги и, в зависимости от предварительной проверки, мне просто нужно вернуться из события Onbegin. Можно ли вернуться из OnBeginEventHandler, с нулевым IAsyncResult (или макет). Я попытался использовать тот же подход, описанный выше, и, похоже, он не работает.

Любая помощь будет оценена

Спасибо

Кунал

1 Ответ

0 голосов
/ 07 сентября 2011

1) Это зависит от того, как вы реализуете свой метод начала. Вы должны иметь возможность вызывать обратный вызов независимо от того, выполняли ли вы операцию синхронно или нет, так как вызывающая сторона может зависеть от вызываемого обратного вызова.

2) Нет. Вы должны вернуть действительный IAsyncResult. Если у вас есть значение, которое вы хотите вернуть из метода BeginXXX, вы должны сохранить его, вызвать обратный вызов и вернуть его из метода EndXXX, возвращая при этом действительный объект IAsyncResult из метода BeginXXX.

Асинхронный перечислитель Джеффри Рихтера поможет вам очень легко реализовать шаблон Begin / End. Вы должны взглянуть на это: http://msdn.microsoft.com/en-us/magazine/cc546608.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...