এএসপি.নেট এমভিসি-তে অ্যাসিঙ্ক কন্ট্রোলার: আসল সুবিধা / কীভাবে অর্জন?


12

আমি এএসপি.নেট এমভিসিতে ( http://visualstudiomagazine.com/articles/2013/07/23/async-ferences-in-aspnet-mvc-4.aspx ) এ অ্যাসিনক্রোনাস নিয়ামক পদ্ধতি সম্পর্কে একটি নিবন্ধের মাধ্যমে কাজ করছি এবং আমি মনে করি আমি পয়েন্ট মিস করতে পারে।

আমি লিখেছি এই পদ্ধতিটি বিবেচনা করুন, যা নিবন্ধের উদাহরণের সাথে খুব মিল similar

[HttpGet]
[AsyncTimeout(8000)]
[HandleError(ExceptionType = typeof(TimeoutException), View = "TimedOut")]
public async Task<ActionResult> Index(CancellationToken cancellationToken)
{
    WidgetPageViewModel model = new WidgetPageViewModel()
    {
        toAdd = new Widget()
    };
    model.all = await _repo.GetAllAsync(cancellationToken);
    return View(model);
}

আমি যেমন জিনিসগুলি বুঝতে পারি, রানটাইমের সময় জিনিসগুলি এভাবে প্রকাশিত হবে:

  1. আগত HTTP অনুরোধের জন্য একটি ASP.NET থ্রেড তৈরি করা হবে।

  2. এই থ্রেডটি (সম্ভবত কিছু প্রয়োজনীয় প্রাথমিক কাজ সম্পন্ন করে) উপরে আমার সূচক () পদ্ধতিতে প্রবেশ করবে।

  3. এক্সিকিউশনটি "অপেক্ষা" কীওয়ার্ডে পৌঁছে যাবে এবং অন্য থ্রেডে ডেটা অর্জনের প্রক্রিয়া শুরু করবে।

  4. আসল "এএসপি.এনইটি" থ্রেডটি কোডটিতে ফিরে আসবে যা আমার হ্যান্ডলার পদ্ধতি বলেছিল, ক্লাস টাস্কের উদাহরণ হিসাবে রিটার্ন মান হিসাবে।

  5. যে ইনফ্রাস্ট্রাকচারাল কোডটিকে আমার হ্যান্ডলার পদ্ধতি বলে অভিহিত করা হয় মূল "এএসপি.এনইটি" থ্রেডে অপারেটিং চালিয়ে যাওয়া, যতক্ষণ না এটি এমন একটি পয়েন্টে পৌঁছায় যেখানে এটি আসল অ্যাকশন রেজাল্ট অবজেক্ট (যেমন পৃষ্ঠাটি রেন্ডার করার জন্য) ব্যবহার করতে হবে।

  6. কলার তারপরে এই টাস্কটি ব্যবহার করুন es ফলাফলগুলি সদস্য হিসাবে এটি অ্যাক্সেস করবেন, যার ফলে এটি (অর্থাত "" ASP.NET "থ্রেড) উপরের # 3 ধাপে স্পষ্টতভাবে তৈরি থ্রেডটির জন্য অপেক্ষা করবে।

অপ্রত্যাশিত / অ্যাসিঙ্ক ব্যতীত একই জিনিসটির তুলনায় এটি কী সম্পাদন করছে তা আমি দেখছি না, দু'টি জিনিস বাদ দিয়ে যা আমি ক্ষুদ্র বলে মনে করি:

  • অপেক্ষার মাধ্যমে তৈরি কলার থ্রেড এবং কর্মী থ্রেড কিছু সময়ের জন্য সমান্তরালভাবে কাজ করতে পারে (উপরের # 5 এর "পর্যন্ত" অংশ)। আমার কুঁচকির সময়টি খুব ছোট is যখন পরিকাঠামো একটি নিয়ামক পদ্ধতিতে কল করে, আমি ভাবছি এটি আরও বেশি কিছু (যদি কিছু করতে পারে) আগে কন্ট্রোলার কলটির প্রকৃত অ্যাকশন রেজাল্ট প্রয়োজন।

  • দীর্ঘমেয়াদী অ্যাসিনক্রোনাস নিয়ামক ক্রিয়াকলাপের সময়সীমা ও বাতিল সম্পর্কিত কিছু সহায়ক নতুন অবকাঠামো রয়েছে।

অ্যাসিঙ্ক কন্ট্রোলার পদ্ধতি যুক্ত করার উদ্দেশ্য হ'ল এইএসপি.এনইটি কর্মীদের থ্রেডগুলি প্রকৃতপক্ষে এইচটিটিপি অনুরোধের উত্তর দেওয়ার জন্য মুক্ত করা। এই থ্রেডগুলি একটি সীমাবদ্ধ সম্পদ। দুর্ভাগ্যক্রমে, আমি নিবন্ধে প্রস্তাবিত প্যাটার্নটি কীভাবে এই থ্রেডগুলি সংরক্ষণ করে। এমনকি যদি তা হয় এবং কোনওরকমে কিছু নন-এএসপি.এনইটি থ্রেডে অনুরোধটি পরিচালনা করার বোঝা অফলোড করে, তবে এটি কী সম্পাদন করে? থ্রেডগুলি যা এইচটিটিপি অনুরোধ পরিচালনা করতে সক্ষম হতে পারে যা সাধারণভাবে থ্রেডের চেয়ে অনেক বেশি আলাদা?


Execution will reach the "await" keyword and kick off a data acquisition process on another thread- অগত্যা। asyncঅন্য থ্রেডের প্রয়োজন নেই ... এটি একটি ধারাবাহিকতা। এটি একই থ্রেডে
রবার্ট হার্ভে


"কার্যকরকরণ অপেক্ষার কীওয়ার্ডে পৌঁছে যাবে এবং অন্য থ্রেডে ডেটা অর্জনের প্রক্রিয়া শুরু করবে।" আপনি এটি পিছনের দিকে পেয়েছেন: প্রত্যাশাটি যখন এটি ফিরে আসে। এটিকে চেষ্টা করুন এবং বিভক্ত করুন যাতে আপনি ফলাফলটি ভেরিয়েবলে GetAllAsync () থেকে সংরক্ষণ করেন এবং পরিবর্তে অপেক্ষা করুন এবং এটি আরও স্পষ্ট হয়ে ওঠে কিনা তা দেখুন।
এসবেন স্কোভ পেডারসেন

উত্তর:


9

টাস্ক সমান্তরাল গ্রন্থাগার (টিপিএল) ব্যবহার করে না এমন এএসপি.নেট থ্রেড পুলে থ্রেডের সংখ্যা দ্বারা একযোগে পরিচালনা করতে পারে এমন অনুরোধগুলির মধ্যে সীমাবদ্ধ। টিএসএল ব্যবহার করে এমন এএসপি.নেট মেশিন পরিচালনার অনুরোধের সিপিইউ / মেমরি / আইও দ্বারা সীমাবদ্ধ।

টাস্ক প্যারালাল লাইব্রেরি (টিপিএল) থ্রেডগুলি সেভাবে খায় না যা আপনি মনে করেন যে এটি করে does টাস্কগুলি থ্রেড নয়, সেগুলি গণনার কোনও ইউনিটের চারপাশে একটি মোড়ক। ব্যস্ত নয় এমন কোনও থ্রেডে প্রতিটি কাজ সম্পাদনের জন্য টাস্ক শিডিয়ুলার দায়বদ্ধ। রানটাইমের সময়, কোনও কাজের জন্য অপেক্ষা করা থ্রেডটি ব্লক করে না, এটি কেবলমাত্র মৃত্যুদন্ডের স্থিতি পার্ক করে যাতে পরবর্তী সময়ে এটি এগিয়ে যেতে পারে।

সাধারণত, কোনও একক এইচটিটিপি অনুরোধটি একটি একক থ্রেড দ্বারা পরিচালনা করা হবে, সাড়া না দেওয়া পর্যন্ত পুল থেকে সেই থ্রেডটি পুরোপুরি সরিয়ে ফেলবে। টিপিএল দিয়ে আপনি এই সীমাবদ্ধতার দ্বারা আবদ্ধ নন। যে কোনও অনুরোধ আসে তা পুলের যে কোনও থ্রেডে এক্সিকিউট করতে সক্ষম প্রতিক্রিয়া গণনা করার জন্য গণনের প্রতিটি ইউনিটের সাথে একটি ধারাবাহিকতা শুরু করে। এই মডেলটির সাহায্যে আপনি স্ট্যান্ডার্ড এএসপি.নেটের চেয়ে আরও অনেকগুলি সমবর্তী অনুরোধগুলি পরিচালনা করতে পারেন।


সুতরাং কখন এএসপি.নেট থ্রেডটি পুলটিতে ফিরে আসবে? "অপেক্ষা" কীওয়ার্ডটি হিট হয় কখন?
ব্যবহারকারী 1172763

async / প্রতীক্ষা + টিপিএল সংকলকটি আপনার কোডটিকে স্বতন্ত্র গণনামূলক ইউনিটে বিভক্ত করতে দেয় যা টাস্ক শিডিয়ুলার দ্বারা নির্বাহ করা হয়। যখন টাস্ক শিডিয়ুলারের আর কোনও কার্য সম্পাদন করা যায় না এবং থ্রেডটি প্রদত্ত কাজটি সমাপ্ত করে তখন একটি থ্রেডটি ধারণাগতভাবে পুলটিতে ফিরে আসে।
মর্টালাপম্যান

এটি ধারণাগতভাবে সঠিক এবং সম্ভবত একটি দরকারী উত্তর ... তবে থ্রেড তত্পরতার কারণে বাস্তবতা কিছুটা জটিল ।
জন উউ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.