I am new to event and delegates. How can I implement an enqueued event for an object of type Queue<T>
?
I am using C# and .Net 4.0
I am new to event and delegates. How can I implement an enqueued event for an object of type Queue<T>
?
I am using C# and .Net 4.0
You can encapsulate the Queue class with your own class, something like:
There are no events fired from the System.Collections.* suite of classes. Since you're using .NET 4.0, you may want to look into
BlockingCollection<T>
instead which, instead of relying on events, you would use the Producer-Consumer pattern to Take elements from the collection as they arrive from another thread.BlockingCollection<T>
will take care of all thread-safety and synchronization for you efficiently.The default backing type for
BlockingCollection<T>
isConcurrentQueue<T>
which sounds like what you want, but it should be noted that you can change it to use aConcurrentStack<T>
orConcurrentBag<T>
if you want/don't mind different ordering characteristics.Another great feature of
BlockingCollection<T>
is the ability to set bounds which can help block the producer from adding more items to the collection than the consumers can keep up with.For a great write up on all aspects of this subject, I suggest checking out this blog post from Alexeandra Rusina. The post also covers ways to work with BlockingCollection using the Task Parallel Library.