Я провел целый день, пытаясь различными способами использовать AddOnPreRenderCompleteAsync и RegisterAsyncTask, но пока безуспешно.
Мне удалось сделать асинхронный вызов в БД с использованием «BeginExecuteReader» и «EndExecuteReader», но в этом нет смысла. Асинхронная обработка не должна быть вызовом БД, который в моем случае является быстрым, это должно происходить впоследствии, во время цикла while, при вызове внешнего веб-сервиса.
Я думаю, что упрощенный псевдокод объяснит лучше:
(Примечание: строка подключения использует 'MultipleActiveResultSets')
private void MyFunction()
{
"Select ID, UserName from MyTable"
// Open connection to DB
ExecuteReader();
if (DR.HasRows)
{
while (DR.Read())
{
// Call external web-service
// and get current Temperature of each UserName - DR["UserName"].ToString()
// Update my local DB
Update MyTable set Temperature = ValueFromWebService where UserName =
DR["UserName"];
CmdUpdate.ExecuteNonQuery();
}
// Close connection etc
}
}
Быстрый доступ к БД. Получение возвращенного результата от внешнего веб-сервиса происходит медленно и, по крайней мере, должно обрабатываться асинхронно.
Если каждый вызов веб-службы занимает всего 1 секунду, при условии, что у меня всего 100 пользователей, для завершения обновления БД потребуется не менее 100 секунд, что, очевидно, не вариант.
Со временем должно быть тысячи пользователей (в настоящее время только 2).
В настоящее время все работает, просто очень синхронно :)
Мысли про себя:
Может быть, мой подход к этому неверен?
Может быть, весь процесс должен называться асинхронно?
Большое спасибо