2013-02-08 23 views
5

के बीच अंतर यदि मैं सिर्फ एक दृश्य वापस करता हूं, तो क्या कार्य से इसे वापस करने के लिए प्रदर्शन भिन्नता है?कार्य <ViewResult> और व्यूआरसल्ट

[HttpGet] 
public Task<ViewResult> Index() 
{ 
    return Task.FromResult(View()); 
} 

[HttpGet] 
public ViewResult Index() 
{ 
    return View(); 
} 
+0

यह http://www.tugberkugurlu.com/archive/asynchronous-database-calls-with-task-based-asynchronous-programming-model-tap-in-asp-net-mvc-4 और यह http देखें: //codeclimber.net.nz/archive/2012/01/09/evolution-of-async-controller-asp-net-mvc.aspx –

उत्तर

3

आपके मामले में, Task संस्करण धीमा होने की संभावना है, क्योंकि आप केवल Task के बिना किसी लाभ के ओवरहेड जोड़ रहे हैं। Task लौटने पर यह समझ में आता है कि आप async - await का लाभ उठा सकते हैं, यानी, यदि आप वास्तव में कुछ क्रियाएं कर रहे हैं जिन्हें आपकी विधि में एसिंक्रोनस बनाया जा सकता है।

1

अतुल्यकालिक कार्रवाई एक मानक तुल्यकालिक कार्रवाई के अलावा कोई तेजी से प्रदर्शन नहीं करेगा; यह सिर्फ सर्वर संसाधनों के अधिक कुशल उपयोग के लिए अनुमति देता है। एसिंक्रोनस कोड के सबसे बड़े लाभों में से एक देखा जा सकता है जब कार्रवाई एक समय में कई एसिंक्रोनस ऑपरेशंस करना चाहता है।

किताब से यह जानकारी है कि Professional ASP.NET MVC 4

नाम पर है इसके अलावा इस विषय के बारे में एक उदाहरण है

public class PortalController : Controller { 
    public ActionResult Index(string city) { 
     NewsService newsService = new NewsService(); 
     WeatherService weatherService = new WeatherService(); 
     SportsService sportsService = new SportsService(); 
     PortalViewModel model = new PortalViewModel { 
      News = newsService.GetNews(city), 
      Weather = weatherService.GetWeather(city), 
      Sports = sportsService.GetScores(city) 
     }; 
     return View(model); 
    } 
} 

ध्यान दें कि कॉल, क्रमिक रूप से प्रदर्शन कर रहे हैं तो समय उपयोगकर्ता को जवाब देने के लिए आवश्यक प्रत्येक व्यक्तिगत कॉल करने के लिए आवश्यक समय के बराबर है। यदि कॉल 200, 300, और 400 मिलीसेकंड (एमएस) हैं, तो कुल क्रिया निष्पादन समय 900 एमएस (साथ ही कुछ insignifi cant overhead) है।

इसी तरह, कि कार्रवाई के बाद प्रपत्र ले जाएगा की एक अतुल्यकालिक संस्करण:

public class PortalController : Controller { 
    public async Task<ActionResult> Index(string city) { 
     NewsService newsService = new NewsService(); 
     WeatherService weatherService = new WeatherService(); 
     SportsService sportsService = new SportsService(); 
     var newsTask = newsService.GetNewsAsync(city); 
     var weatherTask = weatherService.GetWeatherAsync(city); 
     var sportsTask = sportsService.GetScoresAsync(city); 
     await Task.WhenAll(newsTask, weatherTask, sportsTask); 
     PortalViewModel model = new PortalViewModel { 
      News = newsTask.Result, 
      Weather = weatherTask.Result, 
      Sports = sportsTask.Result 
     }; 
     return View(model); 
    } 
} 

ध्यान दें कि आपरेशन सभी समानांतर में शुरू हुआ हैं, इसलिए समय उपयोगकर्ता को जवाब देने के लिए आवश्यक के बराबर है सबसे लंबा व्यक्तिगत कॉल समय। यदि कॉल 200, 300, और 400 एमएस हैं, तो कुल कार्रवाई निष्पादन समय 400 एमएस (साथ ही कुछ insignifi cant overhead) है।

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

  • कोई संबंधित समस्या नहीं^_^