PDA

View Full Version : سوال: Async



sia_2007
چهارشنبه 16 تیر 1389, 19:51 عصر
با سلام به همه شما دوستان
بعضی از شما عزیزان حتما از SqlCommand.BeginExecuteReader استفاده کردین.
یا سایر Begin هاش.
منظورم اینه :
http://www.barnamenevis.org/forum/attachment.php?attachmentid=52492&stc=1&d=1278520132
حالا من میخوام متدی بنویسم که به همین شکل بشه ازش استفاده کرد.
با یه چنین حالتی :
http://www.barnamenevis.org/forum/attachment.php?attachmentid=52494&stc=1&d=1278520132
ببینید؛ من نمیخوام خودم دستی متدم رو تویه یه Thread بندازم.
نمیخوام از متدهای Async ای که خود Proxy Class ساز Visual Studio میسازه استفاده کنم.
و هم چنین Event Driven Async Method هم به درد مشکل من نمیخوره :
یعنی این یکی :
http://www.barnamenevis.org/forum/attachment.php?attachmentid=52493&stc=1&d=1278520132
چرا ؟
روش دستی احمقانه تویه یه Thread انداختن که هیچی ! Event Driven و متدهای Async خود Visual Studio فقط به درد Async شدن تو کلاینت میخورن و تو سرور باز آش همونه و کاسه همون؛ اما اگه با این روش پیش برم؛ دو طرف Async میشن.
و در نتیجه داریم :

increases server scalability and performance


ممنون میشم؛ یه مثال در حد جمع دو تا عدد و بازگردونی نتیجه تو یه End Method به من نشون بدید.
در نهایت برای راهنمایی بیشتر؛ چیزی که من میخوام اینه :


incoming requests are dispatched to the synchronous method


منبع عبارات Bold شده؛ MSDN
من انتظار زیادی ندارم؛ لینک Article ؛ فیلم یا کتاب یا هر چیز دیگه ای هم میتونه سازنده باشه.
ممنون

sia_2007
پنج شنبه 17 تیر 1389, 18:09 عصر
دوستان خواهش میکنم.
اگه جواب این رو بلد نیستید؛ حداقل بگید چطوری میشه مشکل کانکارنسی رو تو این سناریو حل کرد :
یک آبجکت داریم, که چندین ترد ( حالا مثلا 10 تا )؛ باهاش درگیرن ؛ چطوری میتونیم به کانکارنسی فائق بیایم ؟ :افسرده:
دوستان Thread Safe بودن چاره کار نیست؛ چون فقط و فقط یک آبجکت داریم.
بابا اینها مسئله آیا میدانید نیست !
تا حالا هیچ وقت به یه چنین مشکلاتی برخورد نکردین ؟
حداقل یکی یه جکی چیزی بنویسه؛ من بفهمم این مطلب داره دیده میشه. :عصبانی++:
ممنون

jalalx
پنج شنبه 17 تیر 1389, 23:41 عصر
مدت ها پیش من یه همچین کاری کردم که از اینجا یاد گرفتم...

http://www.codeproject.com/KB/cs/AsyncMethodInvocation.aspx

sia_2007
جمعه 20 بهمن 1391, 10:02 صبح
این مطلب رو من حدود یک سال پیش حل کردم، داشتم بوک مارک هام رو می دیدم، گفتم شاید بد نباشه که راه حلش رو این جا بنویسم
راه حل دو مطلب فوق استفاده از Synchronization Context هستش
در WCF شما می توانید فراخوانی تک تک دستورات را در WCF به دست بگیرید، و آن را به Thread Pool بسپارید ( مسئله اول )، و یا در یک Queue قرار دهید و یکی یکی اجرا کنید ( مسئله دوم )
با استفاده از Wait Callback ای که در اختیار شما قرار می گیرد، می تونید هم Send کنید و هم Post تا Sync و Async رو با هم داشته باشید
موفق باشید