مقدمه

با در دسترس بودن کامپیوترهای چند‌هسته‌ای (Multicore Computers)، برنامه‌نویسی ناهمگام (Asynchronous Programming) و برنامه‌نویسی موازی (Parallel Programming) اهمیت روزافزونی پیدا کرده‌اند. چرا که نه؟ این موضوع برای ساخت نرم‌افزاری با پاسخ‌گویی بالا کاملاً ضروری است. ⚡💻

به همین دلیل کار کردن با Threadها در یک محیط چندریسمانی (Multithreaded Environment) اجتناب‌ناپذیر است. بدون شک سخت است، اما در گذشته سخت‌تر بود. برای ساده‌تر کردن تجربه کدنویسی، مایکروسافت از نسخه‌ی .NET Framework 4.0، کتابخانه‌ای به نام Task Parallel Library (TPL) معرفی کرد که بر پایه‌ی مفهوم Task بنا شده بود.

بعدها، در C# 5 شاهد معرفی انقلابی دو کلمه‌ی کلیدی async و await بودیم. با استفاده از آن‌ها، شروع کردیم به سپردن کارهای سنگین به کامپایلر. با این حال باید به خاطر داشته باشید که یک متد معمولی async معمولاً یک Task برمی‌گرداند (در اصطلاح برنامه‌نویسی، Task یا Task). بنابراین جای تعجب نیست که برنامه‌نویسی مبتنی بر Task به زیربنای مدرن برنامه‌نویسی ناهمگام تبدیل شده است.

علاوه بر این، الگوهایی که پیش‌تر برای مدیریت برنامه‌نویسی ناهمگام و موازی استفاده می‌شدند، امروزه دیگر توصیه نمی‌شوند.

به همین دلیل من تصمیم گرفتم یک مجموعه کتابچه‌ی کوچک درباره‌ی برنامه‌نویسی ناهمگام و موازی بنویسم. این مجموعه تلاش می‌کند با بهره‌گیری از ویژگی‌ها و کتابخانه‌های مدرن C# که توسط مایکروسافت توصیه شده‌اند، مفاهیم را ساده‌تر کند.

کتاب Task Programming in C# and .NET: Modern Day Foundation for Asynchronous Programming اولین کتاب از این مجموعه است. این کتاب روی برنامه‌نویسی مبتنی بر Task تمرکز دارد، بدون استفاده از کلمات کلیدی async و await. 📘✨

کتاب چگونه سازمان‌دهی شده است؟ 💹

این کتاب به شما کمک می‌کند تا برنامه‌نویسی مبتنی بر Task را در قالب شش فصل و همراه با تعداد زیادی جلسات پرسش‌وپاسخ (Q&A Sessions) و تمرین‌ها یاد بگیرید. برای اینکه دید روشنی از ساختار فصل‌ها و محتوای کتاب پیدا کنید، در ادامه خلاصه‌ای از نکات آورده شده است:

https://github.com/Apress/Task-Programming-in-C-and-.NET

دانش پیش‌نیاز ✔️

من انتظار دارم شما با زبان C# به‌خوبی آشنا باشید. در واقع، دانستن برخی مفاهیم پیشرفته مثل Delegateها و Lambda Expressionها می‌تواند روند یادگیری شما را سریع‌تر کند. ⚡📘

من فرض می‌کنم که شما می‌دانید چگونه یک برنامه‌ی C# را در Visual Studio کامپایل یا اجرا کنید. این کتاب زمانی را صرف موضوعات ساده و دم‌دستی نمی‌کند؛ موضوعاتی مثل اینکه چطور Visual Studio را روی سیستم نصب کنید یا چگونه یک برنامه‌ی ساده‌ی "Hello World" در C# بنویسید. 🖥️

به طور خلاصه، مخاطبان هدف این کتاب کسانی هستند که می‌خواهند بیشترین بهره را از C# ببرند، با استفاده از قدرت ترکیبی برنامه‌نویسی شیءگرا (Object-Oriented Programming - OOP) و برنامه‌نویسی تابعی (Functional Programming - FP). 🚀

این کتاب برای چه کسانی است؟ 🧐

می‌توانید این کتاب را انتخاب کنید اگر پاسخ شما به پرسش‌های زیر "بله" است:

احتمالاً نباید این کتاب را انتخاب کنید اگر پاسخ شما به هر یک از پرسش‌های زیر "بله" است:

نرم‌افزارهای مفید 💻🛠️

این‌ها نرم‌افزارها و ابزارهای مهمی هستند که من برای نگارش این کتاب استفاده کرده‌ام:

🌐https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version.

📌 یادداشت نویسنده: من تمام کدهای خود را فقط روی Visual Studio تست کرده‌ام. توجه داشته باشید که Visual Studio 2022 for Mac از پیش برای بازنشستگی در تاریخ ۳۱ اوت ۲۰۲۴ برنامه‌ریزی شده بود. برای اطلاعات بیشتر می‌توانید به این لینک مراجعه کنید:

🌐https://learn.microsoft.com/en-us/visualstudio/mac/what-happened-to-vs-for-mac?view=vsma-20.

راهنمای استفاده از این کتاب 📘💡

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

🌐 https://visualstudio.microsoft.com/downloads/

و انتظار می‌رود که شکل Figure 1 را مشاهده کنید.

Conventions-UsedThis-Book

شکل ۱. لینک دانلود Visual Studio 2022 و Visual Studio Code 🔗💻

توجه داشته باشید که در زمان نگارش این کتاب، این لینک به‌درستی کار می‌کند و اطلاعات ارائه‌شده صحیح است. با این حال، ممکن است در آینده لینک‌ها و سیاست‌ها تغییر کنند. همین نکته در مورد تمام لینک‌های ذکرشده در این کتاب نیز صدق می‌کند. ⚠️

قراردادهای استفاده‌شده در این کتاب 📝📚

در این بخش فقط به چند نکته اشاره می‌کنم:

نمونه کد (از فصل ۶):

static void ProcessRecords(IProgress<int> progress)
{
    WriteLine($"Starts processing the records...");
    int progressPercentage = 0;
    for (int i = 1; i <= 5; i++)
    {
        // Varying the delay
        Thread.Sleep(i * 300);
        progressPercentage += 20;
        progress.Report(progressPercentage);
    }
    WriteLine("All the records are processed.");
}

گاهی لازم شده است در ابتدای برخی خطوط چند فاصله اضافه شود. دلیل این کار این است که نشان دهد این خط ادامه خط قبلی است (چون خط کد طولانی بوده و در یک خط جا نمی‌شده).

نمونه (از فصل ۶):

Action greet = new(() => WriteLine($"Task {Task.CurrentId}
    says: Hello reader!"));

سخن پایانی 💡📖

شما فردی باهوش هستید و موضوعی را انتخاب کرده‌اید که می‌تواند در سراسر مسیر شغلی‌تان به شما کمک کند. هنگام یادگیری و مرور این مفاهیم، پیشنهاد می‌کنم حتماً کدنویسی کنید؛ تنها با تمرین و نوشتن کد است که می‌توانید در این حوزه تسلط کامل پیدا کنید. هیچ میانبر یا راه آسانی وجود ندارد.

آیا داستان معروف اقلیـدس و بطلمیوس را شنیده‌اید؟ اقلیـدس رویکردش در ریاضیات بر پایه استدلال منطقی و اثبات‌های دقیق بود. بطلمیوس، پادشاه مصر، از او پرسید آیا راهی آسان‌تر برای یادگیری ریاضی وجود دارد؟ اقلیـدس پاسخ داد:

«هیچ جاده سلطنتی به سوی هندسه وجود ندارد.»

هرچند شما هندسه نمی‌خوانید، اما جوهره این پاسخ اینجاست: باید مطالعه کنید، تمرین کنید و کدنویسی کنید. وقتی با چالش‌ها روبه‌رو می‌شوید، تسلیم نشوید؛ این‌ها نشانه‌های رشد شما هستند. 🚀

اصلاحات و به‌روزرسانی‌ها (Errata) 🔄

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

یک درخواست مهم 🙏

هر کار باکیفیت حاصل روزها، ماه‌ها و حتی سال‌ها تلاش است. نویسندگانی مثل من بخش زیادی از زمان خود را صرف نگارش می‌کنند و به آن وابسته‌اند. لطفاً با جلوگیری از کپی‌برداری و دزدی ادبی از این تلاش‌ها حمایت کنید. اگر به نسخه‌های غیرقانونی آثار ما در اینترنت برخوردید، ممنون می‌شوم اگر آدرس یا نام وب‌سایت را به من یا تیم Apress اطلاع دهید.
لینک گزارش: Apress Piracy Report

اشتراک‌گذاری بازخورد شما 💬

هدف این کتاب این است که در پایان، شما به دانش کافی در برنامه‌نویسی موازی با C# و .NET برسید. اگر این کتاب برایتان مفید بود، لطفاً نظرات و بازخورد ارزشمند خود را در صفحه نظرات آمازون یا هر پلتفرم دلخواه دیگر به اشتراک بگذارید.