Я выполняю асинхронные вызовы веб-службы из приложения C #:
{
//Put UI in 'loading' state
...
//Now call web service
webServiceProxy.BeginMyMethod(param, new AsyncCallback(MyCallback), null);
}
private void MyCallback(IAsyncResult res)
{
...
//process result
// Put UI back in normal state (yes I'm marshalling back to the UI thread)
}
Основной поток переводит приложение в режим ожидания, а затем в конце функции обратного вызова снова активируются элементы управления. Я вижу ошибку, из-за которой пользовательский интерфейс навсегда застревает в режиме загрузки.
Теперь может быть просто ошибка в коде обратного вызова (там довольно много), но мой вопрос к сообществу таков:
ГАРАНТИРУЕТСЯ ли "MyCallback" вызываться? Предполагая, что «BeginMyMethod» не выдал исключение, могу ли я быть уверен, что MyCallback будет выполнен? Я вижу "CompletedSynchronously" и "IsCompleted" на IAsyncResult, возвращенном функциями BeginXXX, но я не уверен, важно это или нет.