C# 在任务并行库场景中按正确顺序登录
我的windows服务是用C#编写的,它检索了数千名员工的沟通细节,并相应地向他们发送电子邮件 我已经为每个员工使用了C# 在任务并行库场景中按正确顺序登录,c#,c#-4.0,task-parallel-library,C#,C# 4.0,Task Parallel Library,我的windows服务是用C#编写的,它检索了数千名员工的沟通细节,并相应地向他们发送电子邮件 我已经为每个员工使用了Parallel.Foreach()块编写了电子邮件发送部分。我需要在(.txt)或(.log)文件中记录我从每个员工那里获取的代码和值的执行情况 由于我使用的是Parallel.Foreach(),因此无法控制值的处理顺序 如何确保我在日志文件中捕获的每一行执行都以正确的顺序记录,以便可以轻松地读取日志文件以供以后使用 请建议。解决此问题的一种方法是使用PLINQ而不是Para
Parallel.Foreach()
块编写了电子邮件发送部分。我需要在(.txt)或(.log)文件中记录我从每个员工那里获取的代码和值的执行情况
由于我使用的是Parallel.Foreach()
,因此无法控制值的处理顺序
如何确保我在日志文件中捕获的每一行执行都以正确的顺序记录,以便可以轻松地读取日志文件以供以后使用
请建议。解决此问题的一种方法是使用PLINQ而不是
Parallel.ForEach()
。如果使用AsOrdered()
,则可以保证PLINQ查询生成的数据顺序正确
虽然我不确定仅仅为了记录而这样更改代码是否有意义
代码可能如下所示(假设sendmail()
返回日志):
执行后处理过程以读取、排序和保存。这将阻止重新编写现有代码。如果这不合适,您可能需要使用
Task.Factory.StartNew…
等重新编写,并根据需要链接任务(这当然会更复杂)。正确的顺序是指时间顺序吗?顺便问一下,您使用的是什么日志库?
var logs = users.AsParallel().AsOrdered()
.Select(u => SendEmail(u));
foreach (var log in logs)
{
AppendLog(log);
}