Mercurial > hg > Database > Christie-sharp
view datagear/WaitList.cs @ 46:41aae40a611c
bug fix
author | riono <e165729@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 07 Jan 2022 19:38:49 +0900 |
parents | efb06874a34e |
children | 6e5c0977d756 |
line wrap: on
line source
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using Christie_net.datagear.command; namespace Christie_net.datagear { public class WaitList { private Dictionary<string, BlockingCollection<Command>> waitlist = new Dictionary<string, BlockingCollection<Command>>(); private object syncObject = new object(); public void Add(Command cm) { lock (syncObject) { if (waitlist.ContainsKey(cm.key)) { waitlist[cm.key].TryAdd(cm); } else { BlockingCollection<Command> queue = new BlockingCollection<Command>(); queue.TryAdd(cm); waitlist.Add(cm.key, queue); } } } public Command GetAndRemoveCommand(string key) { lock (syncObject) { Command cm = null; if (waitlist.ContainsKey(key)) { waitlist[key].TryTake(out cm); if (waitlist[key].Count == 0) { waitlist[key].Dispose(); waitlist.Remove(key); } } Console.WriteLine("cm:" + cm); return cm; } } public bool ContainsKey(string key) { lock (syncObject) { return waitlist.ContainsKey(key); } } } }