Parallel.foreach - 从Active Directory下载图像并将其保存到文件夹。它是线程安全的吗?

时间:2016-08-23 14:28:20

标签: c# c#-4.0 parallel.foreach

我有一个方法:GetThumbnailPhotoForProfile()我传递了一个list<EmployeeInfo>,它有一些属性,如FirstName,LastName和EmailAddress。在方法中,我使用以下代码,基于每个电子邮件地址连接到Active Directory并获取配置文件图像并将其保存到某个位置(C:\ Temp:\ Images)

private bool GetThumbnailPhotoForProfile(List<EmployeeInfo> EmployeeInfoList)
{

Parallel.ForEach(employeeInfoList.Select(emp=>emp.EmailAddress).ToList(),emailAddress =>
{
  var thumbnail = emailAddress.GetThumbnailPhoto();

  if (thumbnail != null)
  {
    thumbnail.Save("C:\Test\Images\" + emailAddress + ".jpg", ImageFormat.Jpeg);
  }
  else
  {
    Log.Information("Thumbnail photo is not available for the {EmailAddress}.", emailAddress);
  }  

});

}

我最初使用foreach循环并发现该方法花费了更多时间,然后我更新了代码以使用Parallel.ForEach并发现它花费的时间更少。我测试了很多次,发现了相同的性能差异。 在这里,我想知道上述方法是否是线程安全有效的,还是有更好的方法来实现它。

任何人都可以在这里指导我。

1 个答案:

答案 0 :(得分:1)

代码是否是线程安全的问题无法仅基于您显示的代码来回答。这取决于GetThumbnailPhoto()Save()究竟做了什么,可能取决于EmployeeInfoList的构建方式。