كيف ومتى تستخدم async و await بشكل صحيح في C#؟ تحليل مع أمثلة
مرحباً بالجميع! أنا مطور C# مبتدئ، ولا أستطيع فهم async/await بشكل جيد. قرأت العديد من المقالات، لكني ما زلت مرتبكاً عملياً.
إليك مثال بسيط. لدي طريقة تقوم بتحميل البيانات من خادم ويب ومعالجتها. سمعت أنه للعمليات الطويلة (مثل تنزيل ملف أو استعلام قاعدة بيانات) يجب استخدام async لتجنب حظر واجهة المستخدم. لكني كتبت هذا الكود وما زال يتجمد:
```csharp
public async Task LoadDataAsync()
{
using (HttpClient client = new HttpClient())
{
// ظننت أن await سيقوم بالسحر
var response = await client.GetStringAsync("https://example.com/data");
// لكن واجهة المستخدم ما زالت تتجمد أثناء التحميل!
return ProcessData(response);
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
var result = LoadDataAsync().Result; // هنا يتجمد كل شيء
textBox.Text = result;
}
```
لاحظت عدة مشاكل:
1. إذا قمت باستدعاء طريقة `async` بشكل متزامن