Amir Mokarchi
Amir Mokarchi
خواندن ۳ دقیقه·۴ سال پیش

پیاده سازی Asynchronous به صورت Multi-Threaded

اول از همه ، برای این که درک درستی از تفاوت بین برنامه نویسی Asynchronous و Multi-Threaded داشته باشیم لطفاً این مطلب زیر رو مطالعه کنید چرا که برخی از سؤالات در ذهن شما پاک خواهد شد.

تفاوت بین Asynchronous و Multi-Threading

تفاوت بین Process و Thread چیست؟

تفاوت بین Task و Thread

در اینجا قیاسی وجود دارد که می‌تواند به درک مشکل کمک کند. شما در رستورانی آشپزی می‌کنید. سفارش تخم‌مرغ به همراه نان تست می‌آید.

روش Synchronous - تو اون تخم‌مرغ‌ها رو درست می‌کنی، بعدش هم نون رو تست می کنی

روش Asynchronous, single threaded - شما شروع به پخت تخم مرغ و تنظیم تایمر می کنید. شما شروع به پخت و پز نان تست می کنید و تایمر را تنظیم میکنید در حالی که هر دو در حال پخت هستند ، شما آشپزخانه را تمیز می کنید. وقتی تایمر خاموش شد ، تخم مرغ ها را از روی حرارت و نان تست را از توستر بیرون می آورید و آنها را سرو می کنید.

روش Asynchronous, multi-threaded - شما دو آشپز دیگر را استخدام می کنید ، یکی برای پختن تخم مرغ و دیگری برای تهیه نان تست. حالا شما مشکل هماهنگ کردن آشپزها را دارید تا آن ها هنگام تقسیم منابع ، در آشپزخانه با یکدیگر نزاع نداشته باشند.


برای روشن تر شدن مسئله من همین مسئله را با یک مورد کاربردی نشان داده ام که در آن 2 کاربر ایجاد خواهم کرد و آنها چندین thread را اجرا می کنند و همزمان لیست عمومی را روی کنسول می خوانند و چاپ می کنند.

برای این که بتونیم این تست ساده رو داشته باشیم نیاز هست که شما کمی با برنامه نویسی به زبان سی شارپ آشنا باشید ما این مراحل ساده را دنبال می کنیم:

  • ایجاد یک لیست عمومی که باید توسط چندین کاربر در thread های جداگانه اجرا شود.
  • ایجاد کاربران مختلف
  • اجرای هر کاربر در یک thread جداگانه
  • فراخوانی متد Async برای چاپ، که در آن ما تأخیر زمانی مختلف را برای هر کاربر اجرا کرده ایم تا سناریوی بلادرنگ فراخوانی async را شبیه سازی کنیم

مرحله اول

کار رو با ایجاد لیستی که توسط چندین کاربر به اشتراک گذاشته خواهد شد شروع خواهیم کرد. سپس متد CreateUsers را فراخوانی خواهیم کرد.

مرحله دوم

ما می‌توانیم thread های مختلفی برای پاس دادن به متد بعدی ایجاد کنیم.

مرحله سوم

در اینجا ما یک thread جداگانه برای هر کاربر ایجاد می‌کنیم و داده‌های کاربر را به متد Print پاس می‌دهیم.

مرحله چهارم

متد Print به روش async فراخوانی می شود و قبل از چاپ پیام در کنسول صبر خواهد کرد. توجه داشته باشید که این روش همزمان روی thread های جداگانه اجرا خواهد شد.

مرحله پنجم

اکنون ما متد Print_Success را به صورت async ایجاد خواهیم کرد که وظیفه چاپ داده ها را از این لیست انجام می دهد و در اینجا برای نشان دادن تاخیرهای متفاوت در زمان واقعی، ما thread را برای مدت‌زمان مختلف به sleep خواهیم برد.

منبع : c-sharpcorner.com

سی شارپasynchronousmultithreadingasyncconcurrency
DotNet Developer
شاید از این پست‌ها خوشتان بیاید