お世話になります。C#にて、キュークラスを利用しプログラミングを行っております。構築したプログラムにて、以下のような処理にてキュー取得ができない?事象が発生しております。
以下処理
1 スレッドから定周期にキューのデータを取得している
2 キュー取得時は、カウントを取得して、カウントが0以上ならば、キューからデータを取得
3 取得時にモニター(monitor.enter)処理をしている
事象
1 キューは0件
2 キューにデータAを登録(キューに1件)
3 なにかの原因でデータAが、取得できない。※ここの原因を調査中
4 5分経過後、タイムアウトと判定し(Timerクラスを利用)
タイムアウトデータBを、キューに登録。(キューに2件)
5 キューから、データAが取得された。 (キューに1件)
6 キューから、タイムアウトデータBが取得された。(キューに0件)
ソース確認すると、データが入っているのに、カウント値が0の場合だと
事象ににたような現象が発生すると考察できるのでうすが、このような事象
の経験はございますでしょうか?ご教授お願いいたします。
フレームワーク:2.0
OS:Windows7
C#
1コード 2private Queue<SysmgrMatrixEventQueData> _sysmgrMatrixEventQue; 3private SysmgrMatrixEventQueData GetMatrixEventQueData() 4{ 5try 6{ 7 Monitor.Enter(_sysmgrMatrixEventQue); 8 9 if (_sysmgrMatrixEventQue.Count > 0) 10 { 11 // イベントキューからデータを取得 12 return _sysmgrMatrixEventQue.Dequeue(); 13 } 14 } 15 catch (InvalidOperationException exp) 16 { 17 LoggingInfo(LoggingDest.LOG4NET, 18 string.Format("Sysmgr.GetMatrixEventQueData(): {0}", exp.Message); 19 } 20 catch (SynchronizationLockException exp) 21 { 22 LoggingInfo(LoggingDest.LOG4NET, 23 string.Format("Sysmgr.GetMatrixEventQueData(): {0}", exp.Message)); 24 } 25 catch (ArgumentNullException exp) 26 { 27 LoggingInfo(LoggingDest.LOG4NET, 28 string.Format("Sysmgr.GetMatrixEventQueData(): {0}", exp.Message)); 29 } 30 finally 31 { 32 Monitor.Exit(_sysmgrMatrixEventQue); 33 } 34} 35
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/14 01:32
2015/12/14 02:51