【发布时间】:2012-02-29 10:17:35
【问题描述】:
检查此功能。
private static IEnumerable<string> FindAccessibleDatabases()
{
var connectionStrings = new List<string>();
Parallel.For(0, _connectionStringCollection.Count, (index, loopState) =>
{
try
{
using (var connection = new OleDbConnection(_connectionStringCollection[index]))
{
connection.Open();
connectionStrings.Add(_connectionStringCollection[index]);
}
}
catch (OleDbException)
{
}
finally
{
connection.Close();
}
});
return connectionStrings.ToList();
}
我正在使用 Parallel.Foreach 并一次从多个数据库的列表中添加值。我可以使用 ConcurrentBag(检索数据时安全,但未提及添加),因为我只是将数据添加到列表中,可以使用 List。
现在如果两个线程同时尝试将数据添加到列表中会发生什么?
如果它会产生竞争条件,如果我使用 ConcurrentBag 会怎样?
谢谢, 奥姆卡尔
【问题讨论】:
-
这被称为“竞争条件”。不要这样做。
-
如果我两个尝试检索我可以理解,但同时添加也会发生?
-
答案非常具体到它是什么类型的列表实现。看不出这怎么可能是 C# 和 Java。
-
@Affe 同意,这显然是 C#。对于
ArrayList<T>,Java 中的答案恰好是相同的,但这是一个实现细节。
标签: c# list c#-4.0 collections