2012-09-18 12 views
6

बनाम मैं "Google पर" है लेकिन अभी भी ..... टास्क, धागा, और पृष्ठभूमि कार्यकर्ता के साथ भ्रमितसी #/VB.Net टास्क थ्रेड बनाम BackgroundWorker

  1. है "टास्क एक उच्च स्तर एपीआई है कि वर्तमान धागे पर चल रहा है "सही?

  2. यदि 1 सही है, तो मुझे उसी थ्रेड पर कार्य के अंदर UI को बदलने के लिए इनवॉक का उपयोग करने की आवश्यकता क्यों है?

  3. पृष्ठभूमि कार्यकर्ता को केवल आवेदन में सबसे कम प्राथमिकता मिली है? तो पृष्ठभूमि कार्यकर्ता का प्रदर्शन कार्य और धागे से कम है? सही ?

  4. आखिरकार, मेरे आवेदन में मुझे स्ट्रिंग को पार्स करने और यूआई अपडेट करने के बाद "HttpWebRequest" का उपयोग कर सर्वर से एक स्ट्रिंग प्राप्त करने की आवश्यकता है। यदि मैं async परिणाम की प्रतीक्षा करने के लिए "HttpWebRequest.BeginGetResponse" का उपयोग करता हूं और UI को अद्यतन करने के लिए एक पूर्ण ईवेंट ट्रिगर करता हूं, तो मुझे UI थ्रेड नियंत्रण को कॉल करने के लिए इनवॉक विधि का उपयोग करने की आवश्यकता है, लेकिन क्या मैं इसके बजाय पृष्ठभूमि कार्यकर्ता का उपयोग कर सकता हूं? मैं बस "RunWorkerCompleted" ईवेंट में UI को बदल सकता हूं, क्या कोई नुकसान है?

मेरे पूल अंग्रेजी के लिए खेद है और मदद के लिए धन्यवाद ...!

+0

कार्य दृश्यों के पीछे थ्रेडपूल का उपयोग करते हैं, वे वर्तमान थ्रेड तक सीमित नहीं हैं जो उन्हें आमंत्रित करता है –

उत्तर

4

1) नहीं, एक कार्य थ्रेड पूल थ्रेड पर डिफ़ॉल्ट रूप से चलाया जाता है। आप एक और शेड्यूलर प्रदान कर सकते हैं जो अलग-अलग कार्यों को चला सकता है।

3) डिफ़ॉल्ट रूप से प्राथमिकता में कोई अंतर नहीं है। BackgroundWorker भी थ्रेड पूल थ्रेड पर चलता है।

Task.Factory.FromAsync<WebResponse>(request.BeginGetResponse, request.EndGetResponse, null) 
    .ContinueWith(
     t => 
     { 
      using (var response = (HttpWebResponse)t.Result) 
      { 
       // Do your work 
      } 
     }, 
     TaskScheduler.FromCurrentSynchronizationContext() 
    ); 

का उपयोग TaskScheduler.FromCurrentSynchronizationContext सुनिश्चित करता है कि ContinueWith में कॉलबैक वर्तमान धागे पर शुरू हो जाती है:

4) TaskFactory.FromAsync का उपयोग अतुल्यकालिक वेब अनुरोधों को हैंडल करने बल्कि एक सरल तरीका है। इसलिए, यदि कार्य UI थ्रेड पर बनाया गया है, तो प्रतिक्रिया पृष्ठभूमि में पुनर्प्राप्त की जाएगी और फिर UI थ्रेड पर संसाधित की जाएगी।

संबंधित मुद्दे