یکی از امکانات برجسته و مهم زبان برنامهنویسی سی شارپ، استفاده از کلمه کلیدی await است که به شما اجازه میدهد تا به سادگی کدهای غیر همزمان (Asynchronous) را پیادهسازی کنید. این ویژگی به شما امکان میدهد که عملیاتهایی که ممکن است زمانبر باشند، مانند درخواستهای شبکه یا دسترسی به فایلهای بزرگ، بهصورت موازی با دیگر فعالیتهای برنامه انجام شوند، بدون اینکه برنامه برای هر کدام از این عملیاتها متوقف شود. در این مقاله با زبان ساده و با استفاده از مثالهای واقعی به بررسی کاربرد await میپردازیم.
چرا Await مهم است؟
در برنامهنویسی سنتی، زمانی که یک عملیات زمانبر مانند دریافت اطلاعات از یک سرور یا خواندن یک فایل بزرگ را اجرا میکنید، برنامه تا زمان اتمام آن عملیات متوقف میماند. این باعث میشود که عملکرد برنامه کاهش یابد و کاربر نتواند همزمان از بخشهای دیگر برنامه استفاده کند. await به برنامهنویس این امکان را میدهد که کد را به صورت غیرهمزمان بنویسد، به طوری که برنامه متوقف نشود و بتواند به اجرای کارهای دیگر ادامه دهد.
مثال از دنیای واقعی
فرض کنید یک برنامه تجاری دارید که باید به طور همزمان اطلاعات مشتریان را از یک سرور دور دریافت کند و از طرفی نیاز دارید که کاربر بتواند به کارهای دیگر مانند مرور محصولات ادامه دهد. در چنین شرایطی، استفاده از await باعث میشود که برنامه منتظر پاسخ سرور نماند و بدون توقف به کارش ادامه دهد.
نحوه استفاده از Await در سی شارپ
برای استفاده از await، ابتدا باید یک متد غیرهمزمان را با استفاده از کلمه کلیدی async تعریف کنید. سپس، در جایی که نیاز به انجام عملیات زمانبر دارید، از await استفاده کنید تا برنامه به صورت غیرهمزمان عملیات را اجرا کند.
مثال کدنویسی:
در این مثال، برنامه یک درخواست HTTP به سرور ارسال میکند و منتظر دریافت دادهها از سرور میماند. با استفاده از await، برنامه نیازی ندارد تا زمان دریافت داده متوقف بماند:
using System.Net.Http;
using System.Threading.Tasks;
public async Task<string> GetDataFromServerAsync()
{
HttpClient client = new HttpClient();
// استفاده از await برای منتظر ماندن به صورت غیر همزمان
string result = await client.GetStringAsync("https://example.com/api/data");
return result;
}
در این کد:
با استفاده از کلمه کلیدی async متد به یک متد غیرهمزمان تبدیل شده است.
await تضمین میکند که برنامه منتظر دریافت دادهها از سرور باشد، اما در همین حین به اجرای سایر وظایف خود ادامه دهد.
تفاوت Await و برنامهنویسی سنتی
برنامهنویسی سنتی: در کدهای سنتی، وقتی یک عملیات زمانبر اجرا میشود، برنامه منتظر میماند تا آن عملیات به پایان برسد و سپس به اجرای بقیه کدها ادامه میدهد. این باعث ایجاد کندی در عملکرد برنامه میشود.
await و برنامهنویسی غیرهمزمان: با استفاده از await، برنامه منتظر تکمیل عملیات نمیماند و در عین حال، میتواند وظایف دیگر را انجام دهد. این باعث میشود که برنامه سریعتر و بهینهتر عمل کند.
مثالهای کاربردی در پروژههای واقعی
1. برنامههای چت
در برنامههای چت، وقتی کاربر پیامی ارسال میکند، شما نمیخواهید که برنامه در انتظار تایید ارسال از سرور بماند و متوقف شود. با استفاده از await، پیام بهصورت غیرهمزمان به سرور ارسال میشود و کاربر همزمان میتواند به ارسال پیامهای دیگر یا انجام فعالیتهای دیگر ادامه دهد:
public async Task SendMessageAsync(string message)
{
// فرض کنید این کد پیام را به سرور ارسال میکند
await SendMessageToServer(message);
Console.WriteLine("پیام ارسال شد");
}
2. برنامههای تجارت الکترونیک
در برنامههای تجارت الکترونیک، هنگام پرداخت آنلاین، باید اطلاعات پرداخت به سرور ارسال و تایید شود. در این شرایط، نمیخواهید که کاربر تا زمان تایید پرداخت از سرور معطل بماند. با استفاده از await میتوانید کاربر را با پیامها یا محتوای دیگر مشغول کنید تا زمانی که پاسخ از سرور دریافت شود:
public async Task ProcessPaymentAsync(string cardNumber)
{
// فرض کنید این کد اطلاعات پرداخت را به سرور ارسال میکند
await SendPaymentToServer(cardNumber);
Console.WriteLine("پرداخت انجام شد");
}
3. درخواستهای همزمان
شما میتوانید چندین درخواست غیرهمزمان را به صورت موازی انجام دهید. به عنوان مثال، فرض کنید که میخواهید همزمان از چندین API مختلف داده دریافت کنید:
public async Task FetchMultipleDataAsync()
{
Task<string> data1 = FetchDataFromApiAsync("https://api1.example.com");
Task<string> data2 = FetchDataFromApiAsync("https://api2.example.com");
await Task.WhenAll(data1, data2);
Console.WriteLine("دادههای هر دو API دریافت شد");
}
4. بهینهسازی رابط کاربری
در برنامههایی با رابط کاربری گرافیکی (GUI) مانند برنامههای دسکتاپ یا موبایل، عملیاتهایی که مدت زمان زیادی طول میکشند، مانند دسترسی به فایلهای بزرگ یا درخواستهای شبکه، میتوانند باعث قفل شدن رابط کاربری شوند. استفاده از await در این شرایط به شما امکان میدهد که این عملیاتها بهصورت پسزمینه انجام شوند و کاربر همچنان بتواند با برنامه تعامل داشته باشد.
نتیجهگیری
await یکی از ویژگیهای قدرتمند سی شارپ است که به برنامهنویسان این امکان را میدهد تا کدهای غیرهمزمان را به روشی ساده و کارآمد پیادهسازی کنند. این ویژگی به شما کمک میکند که برنامههای خود را سریعتر، پاسخگوتر و کارآمدتر کنید، بهویژه در مواقعی که با عملیاتهای زمانبر یا منابع خارجی (مانند سرورها یا دیتابیسها) سروکار دارید.
با استفاده از تکنیکهای ارائهشده در این مقاله، میتوانید به راحتی از await در پروژههای خود استفاده کرده و تجربه برنامهنویسی غیرهمزمان را بهبود بخشید.
اگر به دنبال یادگیری حرفهای سی شارپ هستید، توصیه میشود در دورههای آموزش سی شارپ باگتو شرکت کنید. با یادگیری مفاهیم پایه و پیشرفته، شما میتوانید به سطح بالایی از برنامهنویسی دست یابید.
می توانید مقاله برنامه نویسی غیر همزمان در سی شارپ را مطالعه نمایید.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید