【发布时间】:2016-04-06 07:51:51
【问题描述】:
我正在处理一个用 C# 编写的项目,其中我有几个集合可以被不同的线程/任务访问和修改,因此我使用了 lock em> 关键字(很多)。我按照提到的注释here 和其他在线可用的参考/教程来正确使用这个关键字。在考试中,有人问我如何避免这些显式锁定。在此先感谢,我希望在这里提出这个问题是合适的。
这是一些代码示例(还有其他循环和方法调用,我删除了它们以获得更短的示例):
try
{
lock (this)
{
if (!IsReplaying)
{
//removing igonored tracks from bufferlist
for (int i = 0; i < BufferList.Count; i++)
{
for (int j = 0; j < ListOfIgnoredTracks.Count; j++)
{
CAT62Data dataitem = BufferList[i];
if (BufferList[i].CAT62DataItems[10].value != null)
{
if (BufferList[i].CAT62DataItems[10] != null && BufferList[i].CAT62DataItems[10].value != null)
{
if (dataitem.CAT62DataItems[10].value.ToString() == ListOfIgnoredTracks[j].CAT62DataItems[10].value.ToString() && !dataitem.IsModified && !dataitem.IsUserAdded)
{
BufferList.RemoveAt(i--);
}
}
}
}
}
BufferList.Clear();
RemoveLostTracks(new DateTime());
}
}
}
【问题讨论】:
-
太宽泛了。这涵盖了一本好书的大部分内容,而且远远超出问答形式所能处理的范围。
-
@TomTom 能否请您参考我可以阅读更多相关信息的来源?
-
@dotctor 我上传了一些代码 :)
标签: c# asynchronous collections thread-safety locking