I am about to use a BlockingCollection like below and just wanted to check that it was suitable for thread safety etc. Was wondering if I needed a CancellationTokenSource for anything.
Thanks
public class MyApp
{
private BlockingCollection<int> blockingCollection;
public void Start()
{
blockingCollection= new BlockingCollection<int>();
var task = Task.Factory.StartNew(ProcessData);
}
public void Add(int value)
{
blockingCollection.Add(value); //This is a thread that receives input
}
private void ProcessData()
{
foreach(var item in blockingCollection.GetConsumingEnumerable())
{
...
}
}
public void Finish()
{
blockingCollection.CompleteAdding();
}
}
Obviously, you may use cancellation token to support graceful cancellation pattern in your code: