我有一個快速連續調用的函數,它有一個開放的數據庫連接。 我的問題是,在關閉一個數據庫連接之前,會調用該函數的另一個實例,並且可能會在數據庫中收到死鎖。如何等待線程在C#中完成執行?
我曾嘗試:
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](http://msdn.microsoft.com/en-us/library/4yd16hza.aspx) – climbage
通常,您不會將'ThreadPool'上的新線程的'Start'方法排隊。這種打擊的目的。只需排隊'newAction'。您應該鎖定您身邊的任何方法('PerformBroadcast'?),這可能會導致服務器端發生死鎖。 –
ThreadPool.QueueUserWorkItem(newAction,null);不工作。 ThreadPool.QueueUserWorkItem(newAction,waitHandles [0]);不工作。 –