c# - 在任务并行库场景中按正确顺序记录

标签 c# c#-4.0 task-parallel-library

我用 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/

相关文章:

c# - 多页 PDF 在 iPad 上无法打开

ajax - C# 中服务器端代码的 ModalPopupExtender

c# - 为 Parallel.For 循环设置优先级

c# - 任务并行库和外部 SQL Server

c# - 取消任务时的 OperationCanceledException VS TaskCanceledException

c# - 如何从数据库中选择一周的日期?

c# - 存储有序的字典 - 数据结构

c# 使用 WebClient 下载文件并保存

c# - 在每个测试方法运行之前或之后自动执行方法/代码

c# - 使用 Google Drive API [C#/.NET] 获取文件夹层次结构