आप नीचे दिए गए मामले में इसका इस्तेमाल हो सकता है: कल्पना करें कि आप बैच ईमेल भेजने के लिए आवेदन किया है। आप संदेश प्राप्त करते हैं (प्रत्येक प्राप्तकर्ता के लिए अलग-अलग संदेश \ अनुलग्नक, ताकि आप इसे एक संदेश में गठबंधन नहीं कर सकें), उदाहरण के लिए 20 प्राप्तकर्ताओं का चयन करें और "सभी भेजें" बटन दबाएं। भेजने के लिए आपको "पूल" से SendAsync और कई SmtpClient उदाहरणों का उपयोग करने के लिए (जैसा कि SmtpClient पिछले कॉल को पूरा नहीं होने से पहले एक उदाहरण पर दो बार SendAsync को कॉल करने की अनुमति नहीं देता है)।
आप एक ही SmtpClientSendCompleted सभी SendAsync कॉल जिसमें आप उन्नत लॉगिंग प्रदर्शन करना चाहिए के लिए हैंडलर है: प्रवेश करते है, भेजने के नाम में विफल रहा संदेशों के प्राप्तकर्ताओं की (पते या यहाँ तक कि संलग्नक), लेकिन AsyncCompletedEventArgs का परिणाम उपयोगकर्ता जानकारी की सहायता से ही यह जानकारी प्रदान कर सकते हैं। इसलिए इस उद्देश्य के लिए मूल पैटर्न कस्टम उपयोगकर्ता स्थिति ऑब्जेक्ट का उपयोग करना है।
इंटरफ़ेस जो खेतों आप हैंडलर में की आवश्यकता होगी शामिल हैं:: तो सरलीकृत उदाहरण देख
public interface IEmailMessageInfo{
string RecipientName {get;set;}
}
Async राज्य वर्ग:
/// <summary>
/// User defined async state for SendEmailAsync method
/// </summary>
public class SendAsyncState {
/// <summary>
/// Contains all info that you need while handling message result
/// </summary>
public IEmailMessageInfo EmailMessageInfo { get; private set; }
public SendAsyncState(IEmailMessageInfo emailMessageInfo) {
EmailMessageInfo = emailMessageInfo;
}
}
यहाँ ई-मेल भेजने के लिए कोड:
SmtpClient smtpClient = GetSmtpClient(smtpServerAddress);
smtpClient.SendCompleted += SmtpClientSendCompleted;
smtpClient.SendAsync(
GetMailMessage()
new SendAsyncState(new EmailMessageInfo{RecipientName = "Blah-blah"})
);
और हैंडलर कोड उदाहरण:
private void SmtpClientSendCompleted(object sender, AsyncCompletedEventArgs e){
var smtpClient = (SmtpClient) sender;
var userAsyncState = (SendAsyncState) e.UserState;
smtpClient.SendCompleted -= SmtpClientSendCompleted;
if(e.Error != null) {
tracer.ErrorEx(
e.Error,
string.Format("Message sending for \"{0}\" failed.",userAsyncState.EmailMessageInfo.RecipientName)
);
}
// Cleaning up resources
.....
}
कृपया, अगर आप अधिक जानकारी की आवश्यकता मुझे पता है।
स्रोत
2012-02-09 08:59:00
मैंने एक सरलीकृत मामले के नीचे वर्णित किया है जिसे मैंने अपनी पिछली परियोजनाओं में से एक में उपयोग किया था। –