У меня есть функция, которая вызывается в быстрой последовательности, которая имеет открытое соединение с базой данных. Моя проблема в том, что перед закрытием одного соединения с базой данных вызывается другой экземпляр функции, и я могу получить тупиковую ситуацию в базе данных.
Я пытался:
private static WaitHandle[] waitHandles = new WaitHandle[]
{
new AutoResetEvent(false)
};
protected override void Broadcast(Data data, string updatedBy)
{
Action newAction = new Action(() =>
{
DataManagerFactory.PerformWithDataManager(
dataManager =>
{
// Update status and broadcast the changes
data.UpdateModifiedColumns(dataManager, updatedBy);
BroadcastManager.Instance().PerformBroadcast(
data,
BroadcastAction.Update,
Feature.None);
},
e => m_log.Error(ServerLog.ConfigIdlingRequestHandler_UpdateFailed() + e.Message));
}
);
Thread workerThread = new Thread(new ThreadStart(newAction));
ThreadPool.QueueUserWorkItem(workerThread.Start, waitHandles[0]);
WaitHandle.WaitAll(waitHandles);
}
но я получаю ошибку потока, и программа зависает. Я считаю, что это как-то связано с функцией запуска потока, не имеющей параметров.
Спасибо за любую помощь
QueueUserWorkItem
— это параметр. См. MSDN. - person Mike Park   schedule 06.11.2012Start
нового потока в потокеThreadPool
. Это противоречит цели. Просто поставьте в очередьnewAction
. Вероятно, вам следует заблокировать какой-либо метод на вашей стороне (PerformBroadcast
?), Это может привести к взаимоблокировке на стороне сервера. - person Mike Zboray   schedule 06.11.2012