Async PartialView "HttpServerUtility.Execute अवरुद्ध ..." अपवाद का कारण बनता है


85

मेरे पास एक आंशिक दृश्य है जो IEnumerable<Post>async का उपयोग कर डेटाबेस से पुनर्प्राप्त करने का प्रयास करता है ...

तरीका

public static class PostService
{
    public static int PostsPerPage = 50;

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
    {
        return await entityFrameworkDbContext.Posts
            .ToListAsync();
    }
}

PartialView

public async Task<ActionResult> Recent(int page = 0)
{
    return PartialView(await PostService.GetRecentAsync(page));
}

और फिर अगर मैं इसे कॉल करने की कोशिश करता हूं

@Html.Action("Recent", "Post")

मुझे निम्नलिखित अपवाद मिलते हैं

HttpServerUtility.Execute अवरुद्ध किया गया जबकि एक अतुल्यकालिक ऑपरेशन के पूरा होने की प्रतीक्षा कर रहा है।

विवरण: वर्तमान वेब अनुरोध के निष्पादन के दौरान एक अनियंत्रित अपवाद उत्पन्न हुआ। कृपया त्रुटि के बारे में अधिक जानकारी के लिए स्टैक ट्रेस की समीक्षा करें और यह कोड में कहां उत्पन्न हुआ।

अपवाद विवरण: System.InvalidOperationException: HttpServerUtility.Execute अवरुद्ध करते समय एक अतुल्यकालिक ऑपरेशन पूरा होने की प्रतीक्षा कर रहा है।

मुझे यह त्रुटि क्यों मिली? यह काम नहीं करना चाहिए?

जवाबों:


97

बाल क्रियाओं को सिंक्रोनाइज़ किया जाना चाहिए। अंक 601 मुझे वर्तमान एमवीसी पुस्तकालयों को इस कार्यक्षमता की अनुमति देने वाले किसी भी हाल के अपडेट के बारे में पता नहीं है।

अंक 601 पर एक टिप्पणी, इस कार्यक्षमता पर संकेत MVC vNext, उर्फ ​​में जोड़ा जा रहा है। MVC6। बाल क्रियाओं को प्रतिस्थापित किया जाना चाहिए, ViewComponentजिसे नीचे दिए गए दृश्य से अतुल्यकालिक रूप से आमंत्रित किया जा सकता है। पूर्ण उदाहरण यहाँ और यहाँ

<div>
@await Component.InvokeAsync("YourComponent")
</div>

MVC6 पर अधिक जानकारी के लिए, http://www.asp.net/vnext/overview/aspnet-vnext/overview देखें

नोट: यह उत्तर केवल एक औपचारिकता है, इसलिए प्रश्न को उत्तर के रूप में चिह्नित किया जा सकता है


601 लिंक मान्य नहीं अब और है
सर्ज

6

इस समस्या के लिए वर्कअराउंड MVC द्वारा आवश्यक विधि को समकालिक बनाने के लिए है, सिंक्रोनाइज़ेशन कॉन्टेक्स्ट को साफ़ करें, एस्किंस विधि को कॉल करें और परिणाम की प्रतीक्षा करें, फिर संदर्भ को पुनर्स्थापित करें।

यहाँ मेरा पूरा देखें


3
(यह पोस्ट प्रश्न का एक गुणवत्ता उत्तर प्रदान करने के लिए प्रतीत नहीं होता है । कृपया या तो अपना उत्तर संपादित करें, या बस इसे प्रश्न के लिए एक टिप्पणी के रूप में पोस्ट करें)।
s --unıɐ ɐ qɐp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.