2010-05-28 99 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