मैं एक webservice विधि में कुछ async सामान करने की कोशिश कर रहा हूँ। मान लें कि मेरे पास निम्न API कॉल है: http://www.example.com/api.asmx.NET वेब सेवा और पृष्ठभूमिवर्कर धागे
और विधि GetProducts() कहा जाता है।
मैं यह GetProducts विधियों, मैं कुछ सामान (उदाहरण के लिए डेटाबेस से डेटा प्राप्त करें) तो परिणाम देने से ठीक पहले, मैं कुछ async सामान करना चाहता हूं (उदाहरण के लिए मुझे एक ईमेल भेजें)।
तो मैंने यही किया।
[WebMethod(Description = "Bal blah blah.")]
public IList<Product> GetProducts()
{
// Blah blah blah ..
// Get data from DB .. hi DB!
// var myData = .......
// Moar clbuttic blahs :) (yes, google for clbuttic if you don't know what that is)
// Ok .. now send me an email for no particular reason, but to prove that async stuff works.
var myObject = new MyObject();
myObject.SendDataAsync();
// Ok, now return the result.
return myData;
}
}
public class TrackingCode
{
public void SendDataAsync()
{
var backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += BackgroundWorker_DoWork;
backgroundWorker.RunWorkerAsync();
//System.Threading.Thread.Sleep(1000 * 20);
}
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
SendEmail();
}
}
अब, जब मैं इस कोड को चलाता हूं तो ईमेल कभी नहीं भेजा जाता है। अगर मैं थ्रेड से बाहर निकलता हूं। सो जाओ .. फिर ईमेल भेजा जाता है।
तो ... पृष्ठभूमि कार्यकर्ता धागा टूट गया क्यों है? क्या यह मूल धागे पर निर्भर है? क्या यह गलत तरीका है कि मुझे एएसपीनेट वेब ऐप में पृष्ठभूमि या फोर्कड थ्रेडिंग करना चाहिए?
नींद की टिप्पणी की गई है। मैंने यह देखा कि मैं एक ईमेल भेज सकता हूं या नहीं। जब नींद को अनुमोदित किया जाता है, तो पृष्ठभूमि कार्यकर्ता धागा कोड निष्पादित किया जाता है। जब कोड को कम किया जाता है, तो पृष्ठभूमि कार्यकर्ता थ्रेड कोड कभी निष्पादित नहीं होता है। मैं इसके बजाय थ्रेडपूल का उपयोग करने का प्रयास करूंगा। –
> * यदि आपके पास उच्च मात्रा है, तो एक निर्माता/उपभोक्ता कतार बेहतर थ्रॉटलिंग की अनुमति दे सकती है (इसलिए आप धागे में डूब नहीं जाते हैं) * ooooooo !!!मुझे खुशी है कि आपने वास्तव में इस बिंदु को उठाया! वेब सेवा विधि वास्तव में उच्च मात्रा है! भी मायने रखती है वास्तव में दिलचस्प बनाने के लिए, यह वास्तव में एक ई-मेल नहीं भेज रहा है, लेकिन वास्तव में एक और बाहरी वेबसाइट (EKK, मत पूछो) मार ... ताकि आप मैं इस निर्माता/उपभोक्ता कतार thingy कर सुझाव है? यदि हां ... क्या यह संदर्भ देने के लिए एक अच्छा पृष्ठ है? http://www.albahari.com/threading/part4.aspx (कृपया कोड + के लिए एक उचित बिट नीचे स्क्रॉल करें)। विचार? –
@Marc Gravell मैं अपने समाधान का उपयोग कर की कोशिश की है, लेकिन मैं सिर्फ कारण है कि यह कार्य पूरा करने के लिए बहुत अधिक समय लेने के लिए सोच रहा हूँ। – AnandMohanAwasthi