برنامه‌نویسی غیرهمزمان (async / await) در C#

async و await در C# برای اجرای عملیات‌های طولانی بدون بلاک کردن Thread اصلی استفاده می‌شوند.

async / await چیست؟

این دو کلمه کلیدی به ما کمک می‌کنند عملیات‌هایی مثل دیتابیس، API call یا فایل را بدون قفل کردن برنامه اجرا کنیم.

متد async ساده


public async Task ShowMessageAsync()
{
    await Task.Delay(2000);

    Console.WriteLine("Done");
}

Task چیست؟

Task نماینده یک عملیات در حال اجرا یا آینده است.


public Task GetNumberAsync()
{
    return Task.FromResult(10);
}

await چیست؟

await باعث می‌شود اجرای متد تا پایان Task متوقف شود بدون اینکه Thread block شود.


public async Task ExampleAsync()
{
    Console.WriteLine("Start");

    await Task.Delay(1000);

    Console.WriteLine("End");
}

مثال واقعی: API Call


public async Task GetDataAsync(HttpClient client)
{
    var result = await client.GetStringAsync("https://api.example.com/data");

    return result;
}

async در ASP.NET Core


public async Task Index()
{
    var users = await _context.Users.ToListAsync();

    return View(users);
}

مزایای async / await

  • افزایش performance در عملیات I/O
  • جلوگیری از block شدن thread
  • بهبود scalability در web applications

اشتباهات رایج


// ❌ اشتباه
var result = GetDataAsync().Result;

// ❌ اشتباه
GetDataAsync().Wait();

این روش‌ها می‌توانند باعث deadlock شوند.

جمع‌بندی

async/await یکی از مهم‌ترین قابلیت‌های C# مدرن است که برای ساخت برنامه‌های سریع و مقیاس‌پذیر استفاده می‌شود.