2012-01-23 2 views
0

Я понимаю, что два обратных вызова HttpWebRequest могут выполняться одновременно, потому что запрос является асинхронным. Тем не менее, я хочу работать с базой данных в обратном вызове, и это кажется невозможным с SQL Server. Какова наилучшая практика в этом случае? Есть ли способ добавить эти запросы в очередь, или я должен использовать что-то вроде мьютексов (чего я бы предпочел избежать, поскольку взаимоблокировки трудно отлаживать)?Выполнение запроса SQL Server в обратном вызове HttpWebRequest

Редактировать: Мой текущий код не делает ничего особенного, чтобы предотвратить это. Я запускаю несколько (разных) запросов, а иногда в одном из обратных вызовов я получаю заброшенное исключение («Неверный доступ к кросс-потоку»), когда я пытаюсь отправить изменения в базу данных.

Я пытался использовать Dispatcher.BeginInvoke, но теперь у меня есть сомнения, что он делает то, что я хочу после некоторого Googling (я использовал Dispatcher.BeginInvoke до того успешно, когда доступ к элементам в моем XAML, так что я подумал, что это может исправить мою проблему с доступом к БД)

+0

@ColinE Вы правы, я должен был сказать вам это в первую очередь. Я обновил свой вопрос –

ответ

0

Если вы не выполняете тяжелые вычисления, когда ваши HTTP-запросы завершены, вам не нужно, чтобы ваши обратные вызовы выполнялись одновременно. Вместо того, чтобы использовать диспетчер для возврата назад в поток пользовательского интерфейса, как насчет использования WebClient? DownloadStringCompleted, который этот класс повышает, когда HTTP-запрос завершен, всегда вызывается в потоке пользовательского интерфейса.

+0

Я переключился на HttpWebRequest довольно рано в разработке моего проекта по соображениям производительности. Я действительно не делаю серьезных вычислений, хотя ... Раньше я использовал SQLite (который обрабатывает доступ к перекрестным потокам), возможно, это было причиной проблем с производительностью? В любом случае, можете ли вы предложить менее радикальное решение (у меня много кода HttpWebRequest ...)? –

Смежные вопросы