Thy*_*ari 4 c# multithreading blockingcollection
我正在运行一个线程
while(isRunning)
{
blockingCollection.Take()
}
Run Code Online (Sandbox Code Playgroud)
首先我设置isRunning为false。然后我调用thread.Interrupt它阻止blockingCollection等待新项目。之后,我Dispose为在 catch 块内运行线程的类调用我的方法。
这是最好的/正确的方法吗?
BlockingCollection 有一个 CompleteAdding() 方法并且完全支持取消。
while(isRunning && ! blockingCollection.IsCompleted)
{
isRunning = blockingCollection.TryTake(out someThing, -1, cancelToken);
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以并且应该让 Thread 正常结束,这总是更好的选择。