2013-10-23 7 views
9

क्या करना है। मल्टीथ्रेड का उपयोग करना, क्योंकि मैं प्रत्येक उपयोगकर्ता के लिए SendMail विधि निष्पादित करने का इंतजार नहीं करना चाहता हूं। ऐसा करने के लिए कोई भी परेशानी? धन्यवादसबसे अच्छा तरीका है मैं इस तरह, एक foreach के साथ एक भेजें ईमेल विधि है एक multithread foreach पाश

+1

@ Polaris878 "सर्वोत्तम तरीके" प्रश्नों के साथ समस्या का उत्तर संदर्भ की आवश्यकता है। क्या होगा यदि 'SendEmail' को सिंक्रोनस कोड किया गया है? क्या होगा यदि 'GetAllUsers' लॉकिंग समाप्त हो जाता है? "सर्वोत्तम तरीका" पूछताछ के समस्या डोमेन को बाध्य किया जाता है और यह आम तौर पर लागू नहीं होता है। – Romoku

+1

@ Polaris878 मैं इस प्रश्न के लिए "बहुत व्यापक" के रूप में आपके बिंदु को बंद करने के साथ सहमत हूं, ऐसा कुछ है जो हमें नहीं करना चाहिए। अगर हम व्यापक महसूस करते हैं तो हम अधिक जानकारी के लिए कर सकते हैं। लेकिन मैं आपको यह कहने में नहीं कहूंगा कि "उन्हें Google पर नहीं होना चाहिए"। उन्हें प्रयास दिखाने की ज़रूरत है क्योंकि प्रश्न को बंद कर दिया जाएगा क्योंकि "कोड मांगने वाले प्रश्नों को सुलझाने की समस्या की न्यूनतम समझ का प्रदर्शन करना चाहिए। प्रयास किए गए समाधान, वे क्यों काम नहीं करते हैं, और अपेक्षित परिणाम शामिल हैं। यह भी देखें: स्टैक ओवरफ़्लो प्रश्न चेकलिस्ट " –

+0

यदि आपको इस प्रश्न की वर्तमान स्थिति के साथ कोई समस्या है, तो कृपया इसे [मेटा] (http://meta.stackoverflow.com) पर ले जाएं। –

उत्तर

21

समानांतर foreach का उपयोग करने का प्रयास करें। अर्थात।

Parallel.ForEach(GetAllUsers(), user=> 
{ 
    SendMail(user.Email); 
}); 
9

आप मुझे लगता है कि सबसे आसान तरीका है यह करने के लिए धागा पूलिंग होगा इस

private void Send() 
{ 
    Parallel.Foreach(GetAllUsers(), user => 
    { 
     SendMail(user.Email); 
    }); 
} 
3

की तरह कुछ कोशिश कर सकते हैं। .Net यह बहुत आसान बनाता है और आप इसके बारे में अधिक पढ़ सकते हैं here.