【发布时间】:2014-08-14 10:50:48
【问题描述】:
我很难找出 List.Clear() 方法的问题。我的应用程序在不同的时间崩溃,例如 30 分钟到 5 小时。它发生得非常随机。
下面的代码在后台线程中启动。 我还有一些其他线程同时工作,有些线程可以使用 loggedData1 和 loggedData2 变量。
try
{
while (true)
{
if (LoggingEnabled)
{
var stopwatch = Stopwatch.StartNew();
#region - Reset logging variables
loggedData2.Clear(); // List
loggedData1.Clear(); // List
#endregion
// Lots of more code
}
}
}
catch (Exception ex)
{
// Crashing exception given is "Object synchronization method was called from an unsyncronized block of code"
}
我该如何解决这个问题,我对 Threads 很陌生。感谢您的帮助。
【问题讨论】:
-
List<T>不是线程安全的。考虑使用ConcurrentBag<T> -
你没有告诉我们问题出在哪里。我很确定你有
Monitor.Exit电话或lock某处,发布该代码。否则很难提供帮助。 -
@YuvalItzchakov
ConcurrentBag没有Clear()。 -
@svick 然后清除任何其他并发集合。这是一个建议(可能不是最好的)
标签: c# multithreading exception