2011-05-05 6 views
6

एएसपी.नेट एमवीसी 2 एसिंक्रोनस नियंत्रकों में, हम ऐसा कुछ कर सकते हैं:एएसपी.नेट एमवीसी 2 एसिंक्रोनस नियंत्रकों में, एक्शन फ़िल्टर एसिंक्रोनिस निष्पादित करते हैं?

public class SomeController : AsyncController 
{ 
    [Blurb] 
    public void FooAsync() 
    { 
     this.AsyncManager.OutstandingOperations.Increment(); 

     Task.Factory.StartNew(
      () => 
      { 
       this.AsyncManager.Parameters["result"] = new BazResult(); 
       this.AsyncManager.OutstandingOperations.Decrement(); 
      }); 
    } 

    public ActionResult FooCompleted(ActionResult result) 
    { 
     return result; 
    } 
} 

मेरा सवाल है, क्या इस मामले में एक्शन फ़िल्टर "ब्लर्ब" असीमित रूप से निष्पादित करता है? दूसरे शब्दों में, क्या इसकी तुल्यकालिक प्रकृति स्वचालित रूप से एक एसिंक्रोनस कॉल में लपेटा गया है?

उत्तर

2

मैंने AsyncControllerActionInvoker पर कवर के तहत एक नज़र डाली और ऐसा लगता है कि यह वास्तव में उन्हें अतुल्यकालिक कॉल और निरंतरता के सेट में लपेटता है। यह पर कॉल करता है BeginInvokeActionMethodWithFilters जो बदले में InvokeActionMethodFilterAsynchronously सेट करता है।

उत्सुक लोगों के लिए, स्रोत कोडेप्लेक्स पर है।

+0

तो फ़िल्टर अभी तक एक और धागे पर निष्पादित किया गया है? BeginInvoke थ्रेडपूल थ्रेड का उपयोग नहीं करता है? क्या यह एसिंक कॉल के उद्देश्य को हराने नहीं देता है? –

+0

मेरी समझ यह है कि एसिंक्रोनस कॉल उसी थ्रेड पूल का उपयोग नहीं करते हैं जो वेब अनुरोधों का उपयोग करता है, इसलिए आईआईएस को थ्रेड भुखमरी का सामना नहीं करना पड़ता है। –

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