Avatar ·

كيفية تنفيذ طريقة غير متزامنة Task<T> بشكل متزامن في C#؟

مرحبًا بالجميع! أنا أكتب تطبيق وحدة تحكم في C# (.NET Framework 4.7.2) وواجهت مشكلة. لدي طريقة غير متزامنة تُرجع Task: ```csharp public async Task GetDataAsync() { using (var client = new HttpClient()) { var result = await client.GetStringAsync("https://api.example.com/data"); return result; } } ``` المشكلة هي أنني أستدعي هذه الطريقة من سياق متزامن، على سبيل المثال، من مُنشئ الفئة أو من طريقة Main (التي ليست async). لا يمكنني جعل الطريقة المستدعية غير متزامنة لأن ذلك سيكسر البنية (على سبيل المثال، المُنشئ لا يمكن أن يكون async). لقد جربت طرقًا مختلفة: - `GetDataAsync().Result` — البرنامج يتجمد (deadlock). - `GetDataAsync().GetAwaiter().GetResult()` — يتجمد أيضًا. - `Task.Run(() => GetDataAsync()).Result` — يعمل، لكنني لست متأكدًا من أنه صحيح. أرجو إرشادي حول كيفية تنفيذ طريقة غير متزامنة بشكل متزامن دون deadlock وبأقل قدر من المخاطر.