كيف ومتى تستخدم async و await في C#؟ اشرح مع الأمثلة
مرحباً بالجميع! أنا مطور C# مبتدئ، ولا أستطيع فهم async/await. قرأت الوثائق، ولكن لا تزال لدي أسئلة.
لدي تطبيق WinForms يقوم بتحميل البيانات من خادم ويب. عندما أستدعي طريقة التحميل، تتجمد الواجهة لبضع ثوانٍ. هذا هو الكود الحالي الخاص بي:
```csharp
private void Button_Click(object sender, EventArgs e)
{
var data = DownloadData("https://api.example.com/data");
textBox1.Text = data;
}
private string DownloadData(string url)
{
using (var client = new WebClient())
{
return client.DownloadString(url);
}
}
```
سمعت أن async/await يحل مشكلة تجميد واجهة المستخدم (UI). لكنني لا أفهم:
1. كيف يتم تعريف method غير متزامن بشكل صحيح؟ هل يجب دائمًا إرجاع Task؟
2. متى يتم استخدام await ومتى لا؟ إذا قمت بإزالة await، فإن method لا يزال يعمل، لكنني لا أرى الفرق.
3. هل يمكن عمل async void؟ رأيت ذلك في الأمثلة، لكنهم يقولون إنها ممارسة سيئة.
4. لماذا يجمّع المترجم (compiler)...