Wie führt man eine asynchrone Task<T>-Methode in C# synchron aus?
Hallo zusammen! Ich schreibe eine Konsolenanwendung in C# (.NET Framework 4.7.2) und bin auf ein Problem gestoßen. Ich habe eine asynchrone Methode, die Task zurückgibt:
```csharp
public async Task GetDataAsync()
{
using (var client = new HttpClient())
{
var result = await client.GetStringAsync("https://api.example.com/data");
return result;
}
}
```
Das Problem ist, dass ich diese Methode aus einem synchronen Kontext aufrufe, z.B. aus einem Klassenkonstruktor oder der Main-Methode (die bei mir nicht async ist). Ich kann die aufrufende Methode nicht asynchron machen, da dies die Architektur brechen würde (z.B. kann ein Konstruktor nicht async sein).
Ich habe verschiedene Ansätze ausprobiert:
- `GetDataAsync().Result` — das Programm hängt sich auf (Deadlock).
- `GetDataAsync().GetAwaiter().GetResult()` — hängt sich ebenfalls auf.
- `Task.Run(() => GetDataAsync()).Result` — funktioniert, aber ich bin mir nicht sicher, ob das korrekt ist.
Könnt ihr mir sagen, wie man eine asynchrone Methode korrekt synchron ausführt, ohne Deadlocks und mit minimalem Risiko?
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen