Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在任务并行库场景中按正确顺序登录_C#_C# 4.0_Task Parallel Library - Fatal编程技术网

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

我的windows服务是用C#编写的,它检索了数千名员工的沟通细节,并相应地向他们发送电子邮件

我已经为每个员工使用了
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);
}