我即将使用如下所示的 BlockingCollection,只是想检查它是否适合线程安全等。想知道我是否需要 CancellationTokenSource。
谢谢
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();
}
}
显然,您可以在代码中使用取消 token 来支持优雅的取消模式:
private readonly CancellationTokenSource cts = new CancellationTokenSource();
public void Start()
{
blockingCollection= new BlockingCollection<int>();
var task = Task.Factory.StartNew(ProcessData, cts.Token);
}
private void ProcessData()
{
foreach(var item in blockingCollection.GetConsumingEnumerable(cts.Token))
{
cts.Token.ThrowIfCancellationRequested();
// ...
}
}
public void Cancel()
{
cts.Cancel();
}
我是一名优秀的程序员,十分优秀!