我用 C# 编写的 Windows 服务检索数千个员工通信详细信息,并相应地向他们发送电子邮件。
我已经使用 Parallel.Foreach()
block 为每个员工编写了电子邮件发送部分。我需要记录从每个员工检索的代码和值的执行情况(.txt)或(.log)文件。
由于我使用的是Parallel.Foreach()
,我将无法控制值的处理顺序。
如何确保在日志文件中捕获的每一行执行都以正确的顺序记录,以便轻松读取日志文件以供以后使用。
请提出建议。
最佳答案
解决此问题的一种方法是使用 PLINQ 而不是 Parallel.ForEach()
。如果您使用AsOrdered()
,您可以保证 PLINQ 查询生成的数据的顺序正确。
虽然我不确定仅仅为了日志记录而更改代码是否有意义。
代码可能如下所示(假设 SendEmail()
返回日志):
var logs = users.AsParallel().AsOrdered()
.Select(u => SendEmail(u));
foreach (var log in logs)
{
AppendLog(log);
}
关于c# - 在任务并行库场景中按正确顺序记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17423194/