Sobes.tech
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.