나는 데이터베이스 연결이 열려있는 연속적으로 호출되는 함수를 가지고있다. 내 문제는 한 데이터베이스 연결이 닫히기 전에 함수의 다른 인스턴스가 호출되고 데이터베이스에서 교착 상태가 발생할 수 있다는 것입니다.스레드가 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' '의 두 번째 목적은 파라미터이다. See [MSDN] (http://msdn.microsoft.com/en-us/library/4yd16hza.aspx) – climbage
일반적으로 새 스레드의'Start' 메서드를'ThreadPool'에 대기열에 넣지 않습니다. 그런 종류의 목적을 이겨내야합니다. 그냥'newAction'을 대기열에 넣으십시오. 서버 측에서 교착 상태가 발생할 수있는 측량 방법 ('PerformBroadcast'?)을 잠궈 두어야합니다. –
ThreadPool.QueueUserWorkItem (newAction, null); 나던. ThreadPool.QueueUserWorkItem (newAction, waitHandles [0]); 나던. –