我正在扩展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;
}
}
答案 0 :(得分:1)
好吧,我们不知道EmailService.MailAddressCollection
实际实现了什么。如果它只实现了非通用的IEnumerable
接口,你可以试试这个:
Parallel.ForEach(EmailMessage.To.Cast<MailAddress>(), address =>
{
emailService.InsertRecipient(emailId, address.DisplayName,
address.Address, " ");
});
答案 1 :(得分:0)
您不需要这样做。 SmtpClient类已经有SendAsync方法。
答案 2 :(得分:0)
我让问题复杂化了。我最后使用Parallel.For而不是ForEach。
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));