2010-05-28 97 views
0

我正在扩展System.Net.Mail.MailAddress类包括一个ID字段,所以我创建了一个新的自定义MailAddress类继承自现有的类和新的自定义MailAddressCollection类。然后我重写现有的System.Net.Mail.MailMessage.To以使用我的新集合。parallel.foreach与自定义集合

我想并行处理收件人,但我无法获得正确的语法。这是我正在使用的语法。

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

我的问题很复杂。我最终使用了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)); 
1

好了,我们不知道是什么EmailService.MailAddressCollection实际实现。如果仅实现非通用IEnumerable界面,你可以试试这个:

Parallel.ForEach(EmailMessage.To.Cast<MailAddress>(), address => 
{ 
    emailService.InsertRecipient(emailId, address.DisplayName, 
           address.Address, " "); 
}); 
+0

我添加了邮件地址类。 – SchwartzE 2010-06-01 14:47:10

0

你并不需要这样做。 SmtpClient类已经有一个SendAsync方法。

+0

这不是已经提供的服务。这是一项自定义服务来执行其他功能。 – SchwartzE 2010-05-28 19:20:30