C# 使用 BlockingCollection 正确中止始终运行的线程

Thy*_*ari 4 c# multithreading blockingcollection

我正在运行一个线程

while(isRunning) 
{ 
    blockingCollection.Take()
}
Run Code Online (Sandbox Code Playgroud)

首先我设置isRunning为false。然后我调用thread.Interrupt它阻止blockingCollection等待新项目。之后,我Dispose为在 catch 块内运行线程的类调用我的方法。

这是最好的/正确的方法吗?

Hen*_*man 7

BlockingCollection 有一个 CompleteAdding() 方法并且完全支持取消。

while(isRunning && ! blockingCollection.IsCompleted) 
{ 
   isRunning = blockingCollection.TryTake(out someThing, -1, cancelToken);
}
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以并且应该让 Thread 正常结束,这总是更好的选择。