2

我用 C# 编写的 Windows 服务检索了数千个员工通信详细信息,并相应地向他们发送电子邮件。

Parallel.Foreach()我已经为每个员工编写了使用块的电子邮件发送部分。我需要在 (.txt) 或 (.log) 文件中记录从每个员工检索的代码和值的执行情况。

当我使用 时Parallel.Foreach(),我将无法控制处理值的顺序。

如何确保我在日志文件中捕获的每一行执行都以正确的顺序记录下来,以便以后可以轻松读取日志文件以供以后使用。

请建议。

4

1 回答 1

2

解决此问题的一种方法是使用 PLINQ 而不是Parallel.ForEach(). 如果使用AsOrdered(),则可以保证 PLINQ 查询生成的数据顺序正确。

虽然我不确定像这样仅仅为了记录而改变你的代码是否有意义。

代码可能看起来像这样(假设SendEmail()返回日志):

var logs = users.AsParallel().AsOrdered()
                .Select(u => SendEmail(u));

foreach (var log in logs)
{
    AppendLog(log);
}
于 2013-07-02T13:48:11.983 回答