在并行foreach循环中添加日志语句可以通过以下解决方法:
ConcurrentBag
、ConcurrentQueue
、ConcurrentStack
等)可以在并行循环中进行日志记录。这些类提供了线程安全的数据结构,可以避免多个线程同时写入日志文件时出现的问题。ConcurrentBag logMessages = new ConcurrentBag();
Parallel.ForEach(collection, item =>
{
// 执行循环操作
// ...
// 添加日志记录
logMessages.Add($"Processing item: {item}");
});
// 将日志信息写入日志文件或输出到控制台
foreach (var message in logMessages)
{
Console.WriteLine(message);
}
lock
语句可以保证在每次写入日志时只有一个线程可以访问日志文件。这种方法需要注意锁的粒度,以避免性能问题。object lockObj = new object();
Parallel.ForEach(collection, item =>
{
// 执行循环操作
// ...
// 添加日志记录
lock (lockObj)
{
// 写入日志文件的代码
Console.WriteLine($"Processing item: {item}");
}
});
请根据你的具体情况选择适合的解决方法,并根据需求进行适当的修改。
上一篇:并行ForEach的性能较慢