كيفية استدعاء طريقة غير متزامنة من طريقة متزامنة في C#؟ مشكلة deadlock و await
مرحباً بالجميع! أنا مبتدئ في C# وأحاول فهم async/await. لدي تطبيق WinForms وأستخدم مكتبة توفر فقط طرقاً غير متزامنة (مثل `HttpClient.SendAsync()`). المشكلة هي أنني بحاجة لاستدعاء هذه الطريقة غير المتزامنة من طريقة متزامنة يتم استدعاؤها من حدث زر (button click). لا يمكنني جعل الطريقة بأكملها غير متزامنة لأن ذلك يخالف منطق عمل أجزاء أخرى من البرنامج (مثل الاستدعاء من المُنشئ أو من الخاصية).
إليك مثال مبسط لرمزى:
```csharp
public string GetData()
{
// هذه طريقة متزامنة يجب أن تعيد النتيجة
var client = new HttpClient();
var task = client.GetStringAsync("https://example.com");
task.Wait(); // أحاول انتظار النتيجة
return task.Result; // أحصل على النتيجة
}
```
لكن هذا يؤدي إلى deadlock (تجميد البرنامج). قرأت أن السبب هو سياق التزامن (SynchronizationContext)، لكنني لا أفهم كيفية حلها بشكل صحيح.