Junior — Middle
Wie kann man eine asynchrone Funktion aus einer synchronen Methode aufrufen?
sobes.tech KI
Antwort von AI
В C# вызвать асинхронную функцию из синхронного метода можно несколькими способами, но нужно быть осторожным, чтобы избежать дедлоков.
Самый простой способ — использовать .GetAwaiter().GetResult() или .Result:
public async Task<int> AsyncMethod()
{
await Task.Delay(1000);
return 42;
}
public int SyncMethod()
{
// Вызов асинхронного метода из синхронного
int result = AsyncMethod().GetAwaiter().GetResult();
return result;
}
Однако использование .Result или .Wait() может привести к дедлоку, особенно в UI или ASP.NET контексте.
Если возможно, лучше сделать вызывающий метод асинхронным или использовать паттерн "async all the way".
Если это невозможно, и вы уверены в контексте, то GetAwaiter().GetResult() — более безопасный способ, так как он выбрасывает оригинальное исключение, а не AggregateException.