在 ASP.NET Core 中,出现异常 "操作修改非并发集合必须具有独占访问权限" 通常是因为多个线程同时尝试修改同一个非并发集合(例如 List、Dictionary 等)而引起的。为了解决这个问题,可以使用线程同步机制来确保在修改集合时只有一个线程能够访问它。
以下是一个使用 lock 关键字来同步访问集合的示例代码:
using System;
using System.Collections.Generic;
public class Example
{
private static List collection = new List();
private static object syncRoot = new object();
public void AddItem(string item)
{
lock (syncRoot)
{
collection.Add(item);
}
}
public void RemoveItem(string item)
{
lock (syncRoot)
{
collection.Remove(item);
}
}
}
在这个示例中,我们使用了一个静态的对象 syncRoot
作为同步的锁对象。在修改集合时,我们使用 lock (syncRoot)
代码块来确保只有一个线程能够访问集合。
请注意,使用 lock 关键字来同步访问集合会带来一些性能开销,因为其他线程必须等待锁的释放才能继续执行。因此,如果并发性能是一个重要考虑因素,您可能需要考虑使用并发集合类(例如 ConcurrentBag、ConcurrentDictionary 等)来替代非并发集合。这些并发集合类已经实现了线程安全,不需要手动同步访问。