چکیده

با توجه به گسترش فناوری در دنیای امروز و امکان انجام اکثر عملیات از راه دور ،با استفاده از شبکه‌های جهانی و محلی، همچنین عدم لزوم تمرکز همه داده‌ها در یک محل و نیاز به دستیابی به برخی از اطلاعات راه دور وهم چنین حفظ امنیت اطلاعات در زمان ارسال و دریافت،  اهمیت مسئله نگهداری اطلاعات از دسترسی های غیر مجاز را دو بیش از پیش آشکار می سازد. پنهان نگاری اطلاعات Steganography روشی است که می‌توان اطلاعات مورد نظر را در قالب یک عامل پوشاننده و با بیشترین میزان دقت به امنیت، بین نقاط موردنظر جابجا نمود ، به گونه‌ای که حتی اگر در طی مسیر، اطلاعات از طریق افراد غیرمجاز مورد دسترسی قرار گرفت امکان دستیابی به داده‌های پنهان شده وجود نداشته باشند. در واقع پنهان‌نگاری هنر و علم جاسازی اطلاعات در یک رسانة حامل است که با توجه به پیشرفت قابل توجه ارتباطات دیجیتال استفاده از آن رو به افزایش می‌باشد. در پنهان‌نگاری هدف اصلی، امنیت به معنای عدم توانایی در اثبات وجود پیغام است.

مقدمه

Steganography در یونانی به معنای پوشیده شده یا نوشتن مخفیانه است. هدف  steganography این است که پیغامی را در یک پیغام دیگر ِ بی خطر به روشی ذخیره کند که دشمن پی به وجود پیغام اولی در پیغام دوم نبرد. جوهر های نامرئی یکی از عمومی ترین ابزارها برای steganography هستند استگانوگرافی موضوعی است که به ندرت از طریق هواخواهان امنیتی فناوری اطلاعات مورد توجه قرار گرفته است. در حقیقت  پنهان نگاری (نهان نگاری) پروسه ای است که در طی آن یک داده را در دیگر شکل های دیگر داده ای مثل فایل های عکس یا متن مخفی می کنند. معروف ترین و رایج ترین متد مخفی کردن داده در فایلها بکارگیری تصاویر گرافیکی به عنوان مکان‌هایی مخفی می باشد.

تاریخچه

تاریخچه استگانوگرافی به ۵ قرن قبل از میلاد مسیح و کشور یونان برمی گردد، در آن زمان مردی به نام هیستایاکاس می خواست پیغامی را به صورت محرمانه برای شخص دیگری بفرستد. وی برای فرستادن پیغام مورد استفاده از این روش استفاده کرد: او برده ای را برای این کار انتخاب کرد و موهای سر برده را تراشید و پیغام محرمانه را بر روی پوست سر برده خالکوبی کرد و سپس مدتی صبر کرد تا موهای فرد رشد کرده و به حالت اول برگشت و بعد او را به سمت مقصد (گیرنده) روانه کرد در مقصد، گیرنده ی پیغام دوباره موهای برده را تراشید و پیغام را بر روی پوست سر او مشاهده کرد.

استگانوگرافی چیست؟

استگانو گرافی از لغت یونانی استگانوس (پوشاندن) و گرافتوس (نوشتن ) گرفته شده است. در واقع استگانوگرافی دانشی است برای پنهان کردن داده یا فایلی در فایل دیگر، بطوری که فقط افراد آگاه با ابزار لازم بتوانند به آن دست یابند. استفاده از این روش در مواردی بسیار عالی و کاربردی است. برخلاف رمزگذاری که فایل حفاظت شده را کاملاً حساس جلوه می‌دهد و جلب توجه می کند، این روش از ناآگاهی افراد، برای جلوگیری از دستیابی آن‌ها به اطلاعات خاص بهره می برد. این کار شبیه پنهان کردن اشیای گرانبها در قوطی بیسکویت، داخل کابینت آشپزخانه است؛ جایی که معمولاً هیچ دزدی احتمالش را نمی‌دهد.  پنهان نگاری خود شاخه ای از دانشی به نام ارتباطات پوشیده است. دانش ارتباطات پوشیده خود شامل چندین شاخه از جمله رمز نگاری، ته نقش نگاری و … می باشد.

تفاوت پنهان نگاری(steganogrphy) و رمزنگاری(Cryptography)

تفاوت اصلی رمزنگاری و پنهان نگاری آن است که در رمز نگاری هدف اختفاء محتویات پیام است و نه به طور کلی وجود پیام، اما در پنهان نگاری هدف مخفی کردن هر گونه نشانه‌ای از وجود پیام است. در مواردی که تبادل اطلاعات رمز شده مشکل آفرین است باید وجود ارتباط پنهان گردد. به عنوان مثال اگر شخصی به متن رمزنگاری شده‌ای دسترسی پیدا کند، به هر حال متوجه می‌شود که این متن حاوی پیام رمزی می‌باشد. اما در پنهان نگاری شخص سوم ابدا از وجود پیام مخفی در متن اطلاعی حاصل نمی‌کند. در موارد حساس ابتدا متن را رمزنگاری کرده، آنگاه آن را در متن دیگری پنهان نگاری می‌کنند. اما با وجود بهتر بودن استگانوگرافی در مقابل رمز گذاری همچنان بسیاری از مردم می گویند:رمزنگاری بهتر از استگانوگرافی (stganography) عمل می کند.

شمای کلی استگانوگرافی

برای جاسازی اطلاعات در داخل یک فایل دیگر روش‌های فراوانی وجود دارد. معروف‌ترین این روش ها،روش LSB می‌باشد که اطلاعات را درون بیت‌های کم ارزش رنگ‌های تصویر قرار می‌دهد. استگانوگرافی علاوه بر حمل اطلاعات مخفی کاربردهای دیگری نیز دارد. یکی از کاربردهای عمومی آن می‌تواند این باشد که برای مثال صاحب حقوقی یک عکس، یک سری پیام درون تصویر جاسازی کند. هر گاه چنین تصویری دزدیده شود و در یک وب سایت قرار داده شود، مالک قانونی آن می‌تواند این پیام محرمانه و سری را برای اثبات مالکیت به دادگاه عرضه کند. به این نوع استگانوگرافی اصطلاحاً نشانه گذاری یا watermarking  گفته می‌شود .

انواع مختلف استگانوگرافی

در پنهان‌نگاری به جای تصویر می‌توان از فایل‌های صوتی و یا تصویری و حتی متنی برای مخفی سازی اطلاعات استفاده کرد. در فایل‌های متنی معمولا از tabها وspaceهای آخر سطرها که در اکثر ویرایشگرها توسط انسان قابل تشخیص نیستند، استفاده می‌شود. اطلاعات مخفی شده نیز لزوما متن نیستند بلکه می‌توانند هر نوع فایلی باشند. مثلا می‌توان یک تصویر را نیز در داخل تصویر دیگر جاسازی کرد. همچنین روش‌های پنهان نگاری، محدود به روش‌های مطرح شده‌ی موجود نیستند بلکه هر شخص می‌تواند از روش دلخواه خود برای پنهان نگاری استفاده کند.

تشریح تکنیک هایSteganography

فرمول کلی برای تابع Steganography این چنین است: شی ای که قراراست اطلاعات در آن نگهداری شود + اطلاعاتی که باید مخفی شوند + الگوریتم مورد نظر = شی مورد نظر که اطلاعات در آن مخفی شده اند. فایلی که برای مخفی کردن اطلاعات به کار می رود، می تواند یک تصویر، فایل صوتی و یا یک فایل ویدئویی باشد. درعین حال دو روش معمول برای Steganography وجود دارد که عبارتند از : Injection,LSB.

LSB‎ : وقتی فایلی ساخته می شود،‌ معمولاً بعضی از بایت های آن یا قابل استفاده نیستند و یا کم اهمیت هستند. این بایت ها می توانند تغییرداده شوند، بدون اینکه لطمه قابل توجهی به فایل وارد شود. این خاصیت کمک می کند تا بتوان اطلاعاتی را در این بایت ها قرار داد، بدون اینکه کسی متوجه این موضوع گردد. روش LSB بر روی فایل های تصویری که دارای رزولوشن وتعداد رنگ های بالایی است و بر روی فایل های صوتی که دارای تعداد زیادی صدای مختلف است، ‌به خوبی کارمی کند. ضمناً این روش حجم فایل را افزایش نمی دهد.

Injection‎ : روشی ساده است که برمبنای آن، ‌اطلاعاتی که قراراست مخفی شوند را در یک فایل تزریق می کنند. مهمترین مسأله در این روش،‌ افزایش حجم فایل است

Steganography در فرمت های مختلف:

Steganography در تصاویر

وقتی از یک تصویر برای مخفی نمودن یک متن( نوشته)استفاده می شود، معمولاً ازروش LSB استفاده می شود. ضمناً اگر در درون یک تصویر اطلاعاتی درج شده باشد وسپس این تصویربه فرمت دیگری تبدیل شود، به احتمال بسیار زیاد، بخش اعظمی ازاطلاعات مخفی شده از بین می رود وبخش باقی مانده نیزشاید با سختی فراوان قابل بازیابی باشد.

Steganography درصوت

برای این منظور نیز از روشی مشابه روش LSB استفاده می کنند. البته مشکل استفاده از بیت های کم ارزش در یک فایل صوتی، این است که تغییرات در این بیت ها نیز برای گوش انسان قابل تشخیص است . در حقیقت Spread Spectrum روش دیگری برای مخفی نمودن اطلاعات در یک فایل صوتی است. دراین روش، یک نویز به طور تصادفی در سراسر فایل پخش می شود و اطلاعات در کنار این نویزها قرارداده می شوند. Echo data hiding نیز روش دیگری برای مخفی نمودن اطلاعات در یک فایل صوتی است. این روش از اکو (پژواک) در فایل استفاده می کند تا بتواند اطلاعات را مخفی نماید. دراین وضعیت با اضافه کردن صداهای اضافی به بخش های اکو، می توان اطلاعات را در این قسمت ها مخفی نمود.

Steganography در ویدئو

برای این کار ، معمولاً از روش DCT استفاده می شود. این تکنیک شبیه تکنیک LSB است. یک فایل ویدئویی از تعدادی تصاویر پشت سرهم تشکیل شده است که این تصاویر به نام فریم شناخته می شوند. بنابراین کافی است که اطلاعات خود را درهر فریم یک فایل ویدئویی ، ‌به روش LSB مخفی نماییم.

تشریح تکنیک LSB بر روی یک فایل تصویری

هر فایل تصویری صرفاً یک فایل دودویی است که حاوی رنگ یا شدت نور هر پیکسل برحسب عددی دودویی است. تصاویر معمولاً از فرمت ۸ بیتی یا ۲۴ بیتی استفاده می کنند. در فرمت ۸ بیتی، تنها قادر به استفاده از ۲۵۶ رنگ برای هرپیکسل هستیم ( از این ۸ بیت، هر بیت می تواند یکی از مقادیر ۰ یا ۱ را برگزیند که در مجموع ۲ به توان ۸، ‌یعنی ۲۵۶ رنگ مختلف داریم). درفرمت ۲۴ بیتی نیز هرپیکسل از۲ به توان ۲۴ بیت رنگ می تواند استفاده کند. در این فرمت، هرپیکسل از۳ بایت ۸ بیتی استفاده می کند. هر بایت نشان دهنده شدت روشنایی یکی از سه رنگ اصلی آبی، قرمز و سبز است. به عنوان نمونه،‌رنگ ها در فرمت html بر اساس فرمت ۲۴ بیتی است، ‌که هر رنگ، کدی بر مبنای ۱۶ دارد که از ۶ کاراکتر تشکیل شده است.دو کاراکتر اول، مربوط به رنگ قرمز، دو کاراکتر دوم مربوط به رنگ آبی و دو کاراکتر سوم، مربوط به رنگ سبز است . برای نمونه برای ساختن رنگ نارنجی، باید مقادیر شدت روشنایی رنگ های قرمز، ‌سبز و آبی ، به ترتیب ۱۰۰% و۵۰% و۰ باشد که در html با #FF7FOO قابل تعریف است.

همچنین اندازه یک تصویر، به تعداد پیکسل ها در تصویر بستگی دارد. برای نمونه، برای تصویری با رزولوشن ۴۸۰× ۶۴۰ که از فرمت ۸ بیتی استفاده می کند،‌ اندازه تصویر باید حدود ۶۴۰*۴۸۰*Byte=307KB باشد. به عنوان مثالی دیگر، تصویری با رزولوشن ۱۰۲۴*۷۶۸ که ازفرمت ۲۴ بیتی استفاده می کند، اندازه تصویر باید حدود ۱۰۲۴*۷۶۸*۳Byte=2.36MB باشد. البته این اعداد درصورتی صادق هستند که هیچ فشردگی بر روی فایل اعمال نشده باشد. لازم به ذکراست، ‌فرمت های تصویری GIF وBMP ، 8 بیتی بوده و از روش Lossless (روشی در گرافیک برای فشرده سازی تصاویراست که درآن تمام اطلاعات تصویرحفظ می شود و فقط از تعداد محدودی ازاطلاعات استفاده می شود و در برنامههای خاصی، اطلاعات حفظ شده قابل بازیابی است بنابراین از کیفیت تصویر نیز کاسته نمی شود) استفاده می کنند.

درمقابل، فرمت JPEG ازروش Lossy(دراین روش بخشی ازاطلاعات تصویر برای همیشه ازبین می رود)استفاده می کند. در Steganographyاز فرمت های GIF وBMP به دلیل ویژگی هایی که دارند، استفاده می شوند. ساده ترین راه برای پیاده سازی Steganography استفاده ازبیت های کم ارزش هرپیکسل یا همان روش(Least significant bit insertion) است. برای این منظور اطلاعات را به دو صورت دودویی درآورده و در بیت های کم ارزش پیکسل های تصویر قرار می دهیم . البته ما خواهان این هستیم که تصویر مورد نظر نیز زیاد تغییری نداشته باشد. بنابراین اگر از فرمت ۲۴ بیتی برای این کار استفاده کنیم، چشم انسان قادر به شناسایی این تغییر در تصویر نیست. فرض کنید که سه پیکسل مجاور هم داریم که به صورت زیر کد شده اند: سبز آبی قرمز ۱۱۰۰۱۰۰۱ ۰۰۰۰۱۱۰۱ ۱۰۰۱۰۱۰۱ پیکسل ۱ ۱۱۰۰۱۰۱۰ ۰۰۰۰۱۱۱۱ ۱۰۰۱۰۱۱۰ پیکسل ۲ ۱۱۰۰۱۰۱۱ ۰۰۰۱۰۰۰۰ ۱۰۰۱۱۱۱۱ پیکسل ۳ حال فرض کنید که می خواهیم ۹ بیت اطلاعات ۱۰۱۱۰۱۱۰۱را در این پیکسل ها مخفی نماییم (فرض میشود که این ۹ بیت اطلاعات رمزنگاری شده، یک پیام باشند). حال اگر ازروش LSB استفاده شود و این ۹ بیت در بیت های کم ارزش بایت های این سه پیکسل قرارداده شوند،‌ جدول زیر را خواهیم داشت . سبز آبی قرمز ۱۱۰۰۱۰۰۱ ۰۰۰۰۱۱۰۰ ۱۰۰۱۰۱۰۱ پیکسل ۱ ۱۱۰۰۱۰۱۱ ۰۰۰۰۱۱۱۰ ۱۰۰۱۰۱۱۱ پیکسل ۲ ۱۱۰۰۱۰۱۱ ۰۰۰۱۰۰۰۰ ۱۰۰۱۱۱۱۱ پیکسل ۳ ملاحظه می شود که فقط ۴ بیت تغییر داده شده اند و این لطمه زیادی به تصویر وارد نمی کند، به طوری که چشم اصلاً قادر به تشخیص این تغییرات نیست. به عنوان مثال، تغییربیت رنگ آبی از ۱۱۱۱۱۱۱۱ به ۱۱۱۱۱۱۱۰ اصلاًبرای چشم قابل تشخیص نیست. ناگفته نماند تصاویر سیاه وسفید نیز برای Steganography بسیار مناسب هستند. حال شاید خواهان مخفی کردن یک متن در یک تصویر باشیم. در این وضعیت هر کاراکتر، یک بایت( ۸ بیت)فضا اشغال می کند. از آنجا که این بیت ها را باید درون پیکسل های تصویری قرار دهیم، می بایست این هشت بیت را به بسته های ۱ بیتی تقسیم نماییم و هر بیت را در بیت های سطح پایین یکی ازسه رنگ اصلی پیکسل ها،‌ قرار دهیم با این شیوه، کلمات تمامی زبان هایی را که با ساختار ASCII یا UTF-8 سازگارند، می توان درون تصاویر جاسازی نمود.

پیاده سازی تکنیک LSB

برای این کار معمولاً از فرمت BMF 24 بیتی استفاده می شود. در واقع در این روش معمولاً از دو بیت کم ارزش هر یک از بایت های پیکسل استفاده می شود. این کار به این دلیل است که در یک تصویر، تعداد زیادی کاراکتر را بتوان جا داد همچنین متنی را که قرار است در تصویر مخفی شود، به کد ASCII تبدیل می کنند. سپس هر کاراکتر را به بسته های ۲ بیتی تقسیم می کنند، یعنی هر کاراکتر از ۴ بسته ۲ بیتی تشکیل می شود. سپس این بسته های ۲ بیتی را در دو بیت کم ارزش هر یک از بایت های یک پیکسل،‌ پخش می کنند. یعنی برای هر کاراکتر، ما احتیاج به ۴ بایت از اطلاعات تصویر داریم، که ۳ بایت آن از یک پیکسل بدست می آید و بایت چهارم هم از پیکسل دیگر گرفته می شود. برای راحتی کار، معمولاً بسته های ۲ بیتی را در اولین پیکسل جا سازی می کنند و به همین ترتیب پیش می روند تا تمام متن در تصویر جاسازی گردد. استخراج اطلاعات پنهان شده برای استخراج متون مخفی شده در تصویر عملیات زیر را به ترتیب انجام می دهیم: استخراج بیت های استفاده شده ادغام بیت ها و تبدیل آنها به بایت تبدیل بایت ها به کاراکتر مشاهده کامل متن جا سازی شده

بر پایه مباحث پیشین،‌ همانند مخفی کردن یک متن در یک تصویر، می توان هر نوع فایلی را نیز در یک فایل تصویر یا فایل صدا مخفی کرد. البته به شرطی که تصویر یا صدای مورد نظر، گنجایش لازم برای مخفی کردن فایل را داشته باشد.

نتیجه گیری:

باتوجه به اینکه امروزه روش های زیادی برای ارسال امن اطلاعات در بستر فضای مجازی وجود دارد استفاده از روش های استگانوگرافی می تواند کمک شایانی جهت ارسال و دریافت داده ها نمایند به علاوه اینکه این این تکنیک می تواند به گونه ای ارسال شود که فقط افراد فرستنده وگیرنده قابلیت استخراج اطلاعات را داشته باشند .واز طرفی قابلیت تغییر اصل داده به راحتی امکان پذیر نباشد.

 

 

 

برنامه نویسی Parallel در سی شارپ :: کوئری های Parallel در LINQ

علاوه بر مواردی که تا کنون پیرامون برنامه نویسی Parallel در دات نت آموختیم امکان نوشتن کوئری های LINQ به صورت Parallel نیز وجود دارد. این قابلیت بوسیله یکسری Extension Method که برای این موضوع تعریف شده امکان پذیر است و اصطلاحاً به کوئری های LINQ که به صورت Parallel اجرا می شوند PLINQ گفته می شود.
اما شیوه اجرای کوئری ها به صورت Parallel چگونه است؟ زمانی که شما از متدهای مربوطه برای اجرای کوئری ها به صورت Parallel استفاده می کنید، PLINQ کوئری مورد نظر را آنالیز کرده و تصمیم میگیرد که اجرای کوئری به صورت Parallel بر روی Performance برنامه شما تاثیر منفی می گذارد یا خیر.

کوئری که به صورت Parallel اجرا نشود اصطلاحاً Sequentional گفته می شود و PLINQ به صورت هوشمند نوع اجرای مناسب را برای کوئری شما انتخاب می کند، این موضوع به این معنی است که درخواست اجرای کوئری به صورت Parallel لزوماً تضمینی بر اجرای آن به صورت Parallel نیست و تصمیم این موضوع با آنالیزوری است که کوئری را تحلیل می کند.
متدهای مورد نیاز برای اجرای کوئری ها به صورت Parallel در کلاسی به نام ParallelEnumerable که در فضای نام System.LINQ قرار گرفته تعریف شده اند. در زیر ابتدا نگاهی به این متدها می اندازیم:

  1. متد AsParallel: این متد مشخص می کند که کوئری های بعد از این متد می بایست به صورت Parallel اجرا شوند.
  2. متد WithCancellation: مشخص می کند که در زمان اجرای کوئری به صورت دائم می بایست وضعیت token مشخص شده بررسی شده و در صورت درخواست Cancel کردن کوئری، روند اجرای آن متوقف شود.
  3. متد WithDegreeOfParallelism: مشخص می کند که چه تعداد پردازشگر باید برای اجرای کوئری تخصیص داده شود.
  4. متد ForAll: برای خروجی وضعیتی را فعال می کند که خروجی قبل از ادغام و بازگرداندن آن به Thread اصلی می بایست به صورت Parallel مورد پردازش تکمیلی قرار گیرد، دقیقاً مانند زمانی که نتیجه خروجی یک کوئری LINQ بوسیله دستور foreach مورد پردازش قرار می گیرد.

برای اینکه به صورت عملی با نحوه نوشتن کوئری های LINQ به صورت Parallel آشنا شویم مثال زیر را در نظر بگیرید:

static void Main(string[] args)
{
    Task.Factory.StartNew(ProcessData);

    Console.ReadKey();
}

public static void ProcessData()
{
    var source = Enumerable.Range(1, 1000000).ToArray();

    var evenNumbers = (from number in source where number%2 == 0 orderby number descending select number).ToArray();

    Console.WriteLine("Found {0} even numbers in source.", evenNumbers.Length);
}

در مثال بالا و در متد ProcessData، ابتدا بوسیله متد Range از کلاس Enumerable یک آرایه از اعداد 1 تا 1000000 ایجاد کردیم و در قدم بعدی بوسیله یک کوئری LINQ اعداد زوج را بدست آوردیم و در نهایت در خروجی تعداد اعداد زوج که بوسیله کوئری استخراج شده اند را در خروجی نمایش دادیم. اما اگر بخواهیم کوئری بالا به صورت Parallel اجرا شود می بایست بوسیله کوئری LINQ را به صورت زیر تغییر دهیم و از متد AsParallel استفاده کنیم:

var evenNumbers = (from number in source.AsParallel() where number%2 == 0 orderby number descending select number).ToArray();

همانطور که مشاهده می کنید، بعد از نوشتن منبع یعنی source از متد AsParallel برای اجرای کوئری به صورت Parallel استفاده شده است.

Cancel کردن یک کوئری PLINQ

برای اینکه به کاربر قابلیت کنسل کردن کوئری ها را بدهیم از متد WithCancellation استفاده می کنیم، در ابتدا باید یک شئ از CancellationTokenSource ایجاد کنیم:

private static CancellationTokenSource tokenSource = new CancellationTokenSource();

در قدم بعدی به صورت زیر که در قسمت قبلی آموختیم مکانیزم کنسل کردن کوئری را آموزش می دهیم:

static void Main(string[] args)
{
    Task.Factory.StartNew(ProcessData);
    Console.CancelKeyPress += (sender, eventArgs) = >
    {
        eventArgs.Cancel = true;
        tokenSource.Cancel();
    };
    Console.ReadKey();
}

و در نهایت کد مربوط به کوئری را به صورت زیر تغییر می دهیم:

public static void ProcessData()
{
    var source = Enumerable.Range(1, 1000000).ToArray();

    int[] evenNumbers;

    try
    {
        evenNumbers = (from number in source.AsParallel().WithCancellation(tokenSource.Token) where number%2 == 0 orderby number descending select number).ToArray();
        Console.WriteLine("Found {0} even numbers in source.", evenNumbers.Length);
    }
    catch (OperationCanceledException ex)
    {
        Console.WriteLine(ex);
    }

}

همانطور که مشاهده می کنید در قسمت کوئری و بعد از متد AsParallel از متد WithCancellation برای مشخص کردن token تعریف شده که بواسطه آن کوئری را کنسل می کنیم استفاده کردیم. همچنین قسمت کوئری اصلی را داخل بدنه try..catch گذاشتیم، زیرا در صورت فراخوانی متد Cancel برای شئ tokenSource، کوئری به صورت خودکار خطای OperationCanceledException را تولید می کند (با این مکانیزم در قسمت قبلی آموزش آشنا شدیم.)

با اتمام این بخش مباحث مرتبط با TPL در دات نت نیز به پایان رسید، البته مطالب مرتبط با TPL بسیار گسترده بوده و شاید برای پوشش کل مباحث مرتبط نیاز به نوشتن صدها صفحه مطلب باشد، اما کلیت موضوع را سعی کردیم در این سری مطالب مطرح کنیم.

در قسمت بعدی که قسمت نهایی سری مطالب Asynchronous Programming است با کلمات کلیدی async و await که روش ساده تری برای نوشتن برنامه های Asynchronous در اختیار ما قرار می دهند آشنا می شویم.

منبع


قسمت اول آموزش-برنامه نویسی Asynchronous – آشنایی با Process ها، Thread ها و AppDomain ها

قسمت دوم آموزش- آشنایی با ماهیت Asynchronous در Delegate ها

قسمت سوم آموزش-آشنایی با فضای نام System.Threading و کلاس Thread

قسمت چهارم آموزش- آشنایی با Thread های Foreground و Background در دات نت

قسمت پنجم آموزش- آشنایی با مشکل Concurrency در برنامه های Multi-Threaded و راهکار های رفع این مشکل

قسمت ششم آموزش- آشنایی با کلاس Timer در زبان سی شارپ

قسمت هفتم آموزش-آشنایی با CLR ThreadPool در دات نت

قسمت هشتم آموزش- مقدمه ای بر Task Parallel Library و کلاس Parallel در دات نت

قسمت نهم آموزش- برنامه نویسی Parallel:آشنایی با کلاس Task در سی شارپ

قسمت دهم آموزش-برنامه نویسی Parallel در سی شارپ :: متوقف کردن Task ها در سی شارپ – کلاس CancellationToken

قسمت یازدهم آموزش- برنامه نویسی Parallel در سی شارپ :: کوئری های Parallel در LINQ

قسمت دوازدهم آموزش- آشنایی با کلمات کلیدی async و await در زبان سی شارپ

قسمت سیزدهم آموزش- استفاده از متد WhenAll برای اجرای چندین Task به صورت همزمان در سی شارپ