IAsyncEnumerable ASP.NET वेब एपीआई के साथ कैसे काम करता है पर स्पष्टीकरण


9

ASP.NET वेब API प्रोजेक्ट में IAsyncEnumerable की खोज करते समय मुझे एक दिलचस्प व्यवहार का सामना करना पड़ा। निम्नलिखित कोड नमूनों पर विचार करें:

    // Code Sample 1
    [HttpGet]
    public async IAsyncEnumerable<int> GetAsync()
    {
        for (int i = 0; i < 10; i++)
        {
            await Task.Delay(1000);
            yield return i;
        }
    }


    // Code Sample 2
    [HttpGet]
    public async IAsyncEnumerable<string> GetAsync()
    {
        for (int i = 0; i < 10; i++)
        {
            await Task.Delay(1000);
            yield return i.ToString();
        }
    }

नमूना 1 (इंट सरणी) {}JSON परिणाम के रूप में देता है ।

नमूना 2 रिटर्न अपेक्षित परिणाम ["0","1","2","3","4","5","6","7","8","9"]। हालाँकि, पूरे JSON सरणी को 10 सेकंड के इंतजार के बाद एक बार में लौटा दिया जाता है। क्या इसे वापस नहीं किया जाना चाहिए क्योंकि डेटा IAsyncEnumerable इंटरफ़ेस से अपेक्षित रूप से उपलब्ध हो जाता है? या क्या कोई विशिष्ट तरीका है जिसे इस वेब एपी का उपभोग किया जाना चाहिए?


4
क्या इसे वापस नहीं किया जाना चाहिए क्योंकि डेटा IAsyncEnumerable इंटरफ़ेस से अपेक्षित रूप से उपलब्ध हो जाता है? ... और यह करता है ... लेकिन जेसन धारावाहिक के लिए
सेल्विन

1
और नमूना 1 .... गैर संदर्भ प्रकार के लिए एक बग की तरह लगता है (यदि आप बदल IAsyncEnumerable<int>जाते हैं IAsyncEnumerable<object>- यह काम करना चाहिए लेकिन फिर इसमें एक मुक्केबाजी शामिल है)
सेल्विन

@ सेल्विन, क्या आप कृपया विस्तार से बताएंगे? या एक कोड नमूने की ओर इशारा करते हैं? मैंने C # क्लाइंट के साथ इस एपीआई का उपभोग करने की कोशिश की, परिणाम समान है, 10 सेकंड के लिए इंतजार करना होगा ...
रवि एम पटेल

10 सेकंड के लिए इंतजार करना होगा यह obviosu है ... सरलीकरण सर्वर की तरफ है और यह async नहीं है ... इसके बारे में विस्तार से बताएं?
सेल्विन

जवाबों:


3

हर सेकंड में एक वेब एप कॉल आंशिक जसन नहीं लौटाएगा। यह जौन सीरियलाइज़र है, जिसे 10x1second (या कोड को जस सीरियलाइज़र, जो ASP .NET का हिस्सा है, कॉल करना है) इंतज़ार करना होगा। एक बार जब फ्रेमवर्क कोड और धारावाहिक को सभी डेटा मिल जाते हैं, तो इसे ग्राहक को एकल प्रतिक्रिया के रूप में - क्रमबद्ध रूप से परोसा जाएगा।

ASP.NET कोर वेब एपीआई में कंट्रोलर एक्शन रिटर्न प्रकार हम पढ़ सकते हैं:

ASP.NET Core 3.0 और बाद में, IAsyncEnumerable को किसी क्रिया से वापस करना:

  • अब तुल्यकालिक पुनरावृत्ति का परिणाम नहीं है।
  • IEnumerable लौटने के रूप में कुशल हो जाता है।

ASP.NET Core 3.0 और बाद में यह धारावाहिक को प्रदान करने से पहले निम्नलिखित क्रिया का परिणाम बफ़र करता है:

public IEnumerable<Product> GetOnSaleProducts() =>
  _context.Products.Where(p => p.IsOnSale);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.