【发布时间】:2019-04-23 15:47:26
【问题描述】:
我正在尝试将一个项目添加到 SynchronizedCollection,但只有当我将它直接添加到字段中时它才有效。
_s = new SynchronizedCollection<int>();
_s.Add(01010);
S.Add(123);
private SynchronizedCollection<int> _s;
public SynchronizedCollection<int> S
{
get
{
lock (_s.SyncRoot)
{
return new SynchronizedCollection<int>(_s.SyncRoot, _s);
}
}
private set
{
_s= value;
}
}
如何让它发挥作用?
【问题讨论】:
-
您的
get每次返回集合的新实例时,您应该返回_s...所以您正在向新集合添加元素,然后您实际上将其丢弃...:) -
您的
set是私有的,因此您没有提供在课堂外添加项目的权限。 -
您可以考虑改用
System.Collections.Concurrent集合之一,可能是ConcurrentBag<T>类。 -
您能否举例说明您是如何尝试添加项目的,以及您如何验证它没有被添加?
标签: c# list asynchronous concurrency synchronization