基本的に、Windowsサービスアプリケーションにブロッキングコレクションがあり、コレクションに4つのアイテムを追加して処理するたびに処理します。
1回目は大丈夫ですが、2回目は失敗。エラーは
BlockingCollection は、追加に関して完了としてマークされています。
私のコード:
public static BlockingCollection<Tuple<ChannelResource, string>> bc = new BlockingCollection<Tuple<ChannelResource, string>>();
public static List<string> list = new List<string>(); // then add 100 items to it.
主なアプリケーション コード:
ProcessCall pc = new ProcessCall(OvrTelephonyServer, bc);
while (true)
{
ThreadEvent.WaitOne(waitingTime, false);
lock (SyncVar)
{
Console.WriteLine("Block begin");
for (int i = 0; i < 4; i++)
{
var firstItem = list.FirstOrDefault();
ChannelResource cr = OvrTelephonyServer.GetChannel();
bc.TryAdd(Tuple.Create(cr, firstItem));
list.Remove(firstItem);
}
bc.CompleteAdding();
pc.SimultaneousCall();
Console.WriteLine("Blocking end");
if (ThreadState != State.Running) break;
}
}
bc.CompleteAdding();
それ以上の追加をブロックするコードがあることに気付きました。ということでコメントアウトしたのですが、2ラウンド目のブロックにはいきませんでした。コードに至りませんでした。私の古いスレッドConsole.WriteLine("Blocking end");
と同じでした。