[英]parallel.foreach with custom collection
我正在扩展System.Net.Mail.MailAddress
类以包括ID字段,因此我创建了一个新的自定义MailAddress
类,该类继承自现有类和新的自定义MailAddressCollection
类。 然后,我覆盖了现有的System.Net.Mail.MailMessage.To
以使用我的新集合。
我想并行处理接收者,但是语法不正确。 这是我使用的语法。
Parallel.ForEach(EmailMessage.To, (MailAddress address) =>
{
emailService.InsertRecipient(emailId, address.DisplayName, address.Address, " ");
});
我收到以下错误:
最佳重载方法匹配'System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable,System.Action)'有一些无效的参数
参数1:无法从“ EmailService.MailAddressCollection”转换为“ System.Collections.Generic.IEnumerable”
使用自定义集合需要什么语法?
这是EmailService.MailAddress类:
public class MailAddress : System.Net.Mail.MailAddress
{
/// <summary>
/// Contains an identifier of the address for use in sending unique email links.
/// </summary>
public string ID = "";
public MailAddress(string Address) : base(Address)
{
}
public MailAddress(string Address, string Name): base(Address, Name)
{
}
public MailAddress(string Address, string Name, string Id) : base(Address, Name)
{
ID = Id;
}
}
好吧,我们不知道EmailService.MailAddressCollection
实际实现了什么。 如果它仅实现非通用IEnumerable
接口,则可以尝试以下操作:
Parallel.ForEach(EmailMessage.To.Cast<MailAddress>(), address =>
{
emailService.InsertRecipient(emailId, address.DisplayName,
address.Address, " ");
});
您不需要这样做。 SmtpClient类已经具有一个SendAsync方法。
我使问题复杂化了。 我最终使用带有计数器而不是ForEach的Parallel.For。
System.Threading.Tasks.Parallel.For(0, EmailMessage.To.Count,
i => emailService.InsertRecipient(emailId, EmailMessage.To[i].DisplayName,
EmailMessage.To[i].Address, EmailMessage.To[i].Id));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.