0

Я использую Linq для sql для операций с базами данных в моем проекте WP8. Существует ли общий способ выполнения операции ожидания, когда другой поток выполняет операции над этой базой данных? Иногда я получаю необработанное исключение, которое прекратит приложение, потому что есть операции в ожидании.wait for db operation on another thread

ответ

2

Используйте запирающий механизм.

Во-первых, создать объект в своем классе:

private object syncRoot = new object(); 

Затем приложите все критические участки кода внутри lock блока:

lock (this.syncRoot) 
{ 
    // This section of code will be executed by only one thread at a time 
} 

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

+0

hi KooKiz благодарит за быстрый ответ. блокировка внутри асинхронных функций недопустима, и я использую, например, обновлять элементы пользовательского интерфейса, такие как списки. и по этой причине доступ к базе данных очень децентрализован. Но я собираюсь попробовать, спасибо! –

+2

@ElMarchewko Проверьте эту ссылку: [Создание примитивов для координации Async, часть 6: AsyncLock] (http://blogs.msdn.com/b/pfxteam/archive/2012/02/12/10266988.aspx) для способа блокировки асинхронные блоки. –