এই প্রশ্নের পরে, এএসপি.নেট এমভিসিতে অ্যাসিঙ্ক অপারেশনগুলি ব্যবহার করার সময় এটি আমাকে আরামদায়ক করে তোলে। সুতরাং, আমি এটিতে দুটি ব্লগ পোস্ট লিখেছি:
এএসপি.নেট এমভিসিতে অ্যাসিক্রোনাস অপারেশন সম্পর্কে আমার মনে অনেক ভুল ধারণা রয়েছে।
আমি সর্বদা এই বাক্যটি শুনি: ক্রিয়াকলাপগুলি অবিচ্ছিন্নভাবে চালিত হলে অ্যাপ্লিকেশন আরও ভাল স্কেল করতে পারে
এবং আমি এই ধরণের বাক্যগুলিও অনেক শুনেছি: আপনার যদি ট্র্যাফিকের পরিমাণ খুব বেশি থাকে তবে আপনি আপনার প্রশ্নগুলি তাত্পর্যপূর্ণভাবে সম্পাদন না করা ভাল be এক অনুরোধের জন্য দুটি অতিরিক্ত থ্রেড গ্রহণ করা অন্যান্য আগত অনুরোধগুলি থেকে দূরে সঞ্চার করে।
আমার মনে হয় এই দুটি বাক্যই বেমানান।
থ্রেডপুলটি কীভাবে এএসপি.নেটে কাজ করে সে সম্পর্কে আমার বেশি তথ্য নেই তবে আমি জানি থ্রেডপুলের থ্রেডগুলির জন্য সীমিত আকার রয়েছে। সুতরাং, দ্বিতীয় বাক্যটি এই সমস্যার সাথে সম্পর্কিত হতে হবে।
এবং আমি জানতে চাই যে এএসপি.নেট এমভিসিতে অ্যাসিক্রোনাস অপারেশনগুলি। নেট 4 এ থ্রেডপুল থেকে কোনও থ্রেড ব্যবহার করে?
উদাহরণস্বরূপ, আমরা যখন অ্যাসিঙ্ক কনট্রোলার প্রয়োগ করি তখন অ্যাপ স্ট্রাকচারটি কীভাবে হয়? যদি আমি বিপুল ট্র্যাফিক পাই, তবে এসিঙ্ককন্ট্রোলার প্রয়োগ করা কি ভাল ধারণা?
এর বাইরে এমন কেউ আছে যে আমার চোখের সামনে এই কালো পর্দাটি সরিয়ে নিয়ে যায় এবং আমাকে এএসপি.নেট এমভিসি 3 (নেট 4) এ অ্যাসক্রোনারি সম্পর্কিত চুক্তিটি ব্যাখ্যা করতে পারে?
সম্পাদনা:
আমি নীচে এই নথিটি প্রায় শতাধিকবার পড়েছি এবং আমি মূল চুক্তিটি বুঝতে পারি তবে এখনও আমার বিভ্রান্তি আছে কারণ সেখানে খুব বেশি বেমানান মন্তব্য রয়েছে।
ASP.NET MVC তে একটি অ্যাসিঙ্ক্রোনাস কন্ট্রোলার ব্যবহার করা
সম্পাদনা:
ধরে নেওয়া যাক আমার নীচের মতো কন্ট্রোলার অ্যাকশন রয়েছে ( AsyncController
যদিও এর বাস্তবায়ন নয় ):
public ViewResult Index() {
Task.Factory.StartNew(() => {
//Do an advanced looging here which takes a while
});
return View();
}
আপনি যেমন এখানে দেখেন, আমি একটি অপারেশন চালাচ্ছি এবং এটি সম্পর্কে ভুলে গেছি। তারপরে, আমি এটি সম্পন্ন হওয়ার অপেক্ষায় অবিলম্বে ফিরে আসি।
এই ক্ষেত্রে, এটিতে থ্রেডপুল থেকে কোনও থ্রেড ব্যবহার করতে হবে? যদি তাই হয়, এটি সম্পূর্ণ হওয়ার পরে, সেই থ্রেডের কী হবে? GC
এটি সম্পূর্ণ হওয়ার পরে কি আসে এবং পরিষ্কার করা যায়?
সম্পাদনা:
@ ডারিনের উত্তরের জন্য, এখানে অ্যাসিঙ্ক কোডের একটি নমুনা যা ডাটাবেসে কথা বলে:
public class FooController : AsyncController {
//EF 4.2 DbContext instance
MyContext _context = new MyContext();
public void IndexAsync() {
AsyncManager.OutstandingOperations.Increment(3);
Task<IEnumerable<Foo>>.Factory.StartNew(() => {
return
_context.Foos;
}).ContinueWith(t => {
AsyncManager.Parameters["foos"] = t.Result;
AsyncManager.OutstandingOperations.Decrement();
});
Task<IEnumerable<Bars>>.Factory.StartNew(() => {
return
_context.Bars;
}).ContinueWith(t => {
AsyncManager.Parameters["bars"] = t.Result;
AsyncManager.OutstandingOperations.Decrement();
});
Task<IEnumerable<FooBar>>.Factory.StartNew(() => {
return
_context.FooBars;
}).ContinueWith(t => {
AsyncManager.Parameters["foobars"] = t.Result;
AsyncManager.OutstandingOperations.Decrement();
});
}
public ViewResult IndexCompleted(
IEnumerable<Foo> foos,
IEnumerable<Bar> bars,
IEnumerable<FooBar> foobars) {
//Do the regular stuff and return
}
}