【问题标题】:How to avoid explicit lock in asynchronous programming in C#? [closed]如何避免 C# 异步编程中的显式锁定? [关闭]
【发布时间】: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


【解决方案1】:

其中一个答案是,您可以使用此命名空间来代替标准集合。

System.Collections.Concurrent

在这里您会找到相同的集合,它们是线程安全的。 所以你不需要再写lock了。

【讨论】:

  • 我实际上看过它,但基于此link 它不是异步执行的。
  • @arvind。当许多线程尝试从该集合中添加元素或删除元素时使用这些集合。因此线程不会相互阻止,它们使用此集合
猜你喜欢
  • 1970-01-01
  • 2017-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2023-03-19
相关资源
最近更新 更多