gpt4 book ai didi

c# - 如何从 ConcurrentBag 中删除所有项目?

转载 作者:IT王子 更新时间:2023-10-29 03:42:48 25 4
gpt4 key购买 nike

如何清除ConcurrentBag?它没有任何方法,如 ClearRemoveAll...

最佳答案

2017 年 10 月 3 日更新:正如@Lou 正确指出的那样,赋值是原子的。在这种情况下,ConcurrentBag 的创建将不是原子的,但是将该引用放入变量 是原子的 - 因此锁定或 Interlocked.Exchange 围绕它并不是严格要求的。

进一步阅读:

reference assignment is atomic so why is Interlocked.Exchange(ref Object, Object) needed?

Is a reference assignment threadsafe?


您始终可以锁定对包本身的访问并创建它的新实例。包中的元素如果没有其他元素,则有资格获得 GC:

lock (something)
{
bag = new ConcurrentBag();
}

或者正如 Lukazoid 指出的那样:

var newBag = new ConcurrentBag();
Interlocked.Exchange<ConcurrentBag>(ref bag, newBag);

将内容装箱的简单方法,但是,这假设每当一个项目想要访问时它也会获得锁定 - 这可能会很昂贵并且可能会抵消已经进入 ConcurrentBag 本身的性能调整.

如果你知道此时没有其他东西可以访问包,请翼翼祈祷它并且不要锁定 :-)

关于c# - 如何从 ConcurrentBag 中删除所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com