আইএএসএনসিউনমেন্টেবল কীভাবে এএসপি.নেট ওয়েব এপিআইয়ের সাথে কাজ করে সে সম্পর্কে স্পষ্টতা


9

একটি এএসপি.নেট ওয়েব এপিআই প্রকল্পে 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 (int অ্যারে) {}JSON ফলাফল হিসাবে ফিরে আসে ।

নমুনা 2 প্রত্যাশিত ফলাফল প্রদান করে ["0","1","2","3","4","5","6","7","8","9"]। তবে 10 সেকেন্ড অপেক্ষা করার পরে পুরো JSON অ্যারে একবারে ফিরে আসে। আইএআইএসএনসিউনমেন্টেবল ইন্টারফেস থেকে প্রত্যাশার মতো ডেটা উপলভ্য হওয়ার সাথে সাথে কী তা ফেরানো উচিত নয়? বা এই ওয়েব এপিআই গ্রহণ করা উচিত কোন নির্দিষ্ট উপায়?


4
আইএআইএসএনসিউনমেন্টেবল ইন্টারফেস থেকে প্রত্যাশার মতো ডেটা উপলভ্য হওয়ার সাথে সাথে কী তা ফেরানো উচিত নয়? ... এবং এটি করে ... তবে জসন সিরিয়ালাইজারের জন্য
সেলভিন

1
এবং নমুনা 1 .... অ রেফারেন্স টাইপের জন্য বাগের মতো মনে হচ্ছে (আপনি যদি পরিবর্তন IAsyncEnumerable<int>করেন IAsyncEnumerable<object>- এটির কাজ করা উচিত তবে একটি বক্সিং জড়িত থাকতে পারে)
সেলভিন

@ সেলভিন, আপনি কি দয়া করে বিস্তারিত বলবেন? বা একটি কোড নমুনা নির্দেশ? আমি এই এপিআইটি সি # ক্লায়েন্টের সাথে গ্রাস করার চেষ্টা করেছি, ফলাফলটি একই, 10 সেকেন্ড অপেক্ষা করতে হবে ...
রবি এম প্যাটেল

এটি ওভিভিসু 10 সেকেন্ড অপেক্ষা করতে হবে ... সিরিয়ালাইজেশন সার্ভারে রয়েছে এবং এটি অ্যাসিঙ্ক নয় ... কী সম্পর্কে বিস্তারিত?
সেলভিন

উত্তর:


3

একটি ওয়েব এপিআই কল প্রতি সেকেন্ডে আংশিক জেসনকে ফিরে আসবে না। এটি সেই জসন সিরিয়ালাইজার যিনি 10x1 সেকেন্ড অপেক্ষা করতে হবে (বা কোডটি যেটি জসন সিরিয়ালাইজারকে কল করে, যা এএসপি। নেট এর অংশ)। ফ্রেমওয়ার্ক কোড এবং সিরিয়ালাইজারটি সমস্ত ডেটা পাওয়ার পরে, এটি ক্লায়েন্টের কাছে - একক প্রতিক্রিয়া হিসাবে - পরিবেশন করা সিরিয়ালাইজ করা হবে।

এএসপি.নেট কোর ওয়েব এপিআই-কন্ট্রোলার অ্যাকশন রিটার্নের ধরণগুলিতে আমরা পড়তে পারি:

এএসপি.নেট কোর 3.0.০ এবং তারপরে, কোনও ক্রিয়াকলাপ থেকে আইএএনসিএনইউনেবল ফেরত:

  • সিঙ্ক্রোনাস পুনরাবৃত্তির ফলাফল আর নেই।
  • ফিরিয়ে আনার মতো কার্যকর হয়ে ওঠে n

এএসপি.নেট কোর 3.0 এবং পরবর্তীকালে সিরিয়ালের সাথে এটি সরবরাহের আগে নিম্নলিখিত ক্রিয়াটির ফলাফলটি বাফার করে:

public IEnumerable<Product> GetOnSaleProducts() =>
  _context.Products.Where(p => p.IsOnSale);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.