Sobes.tech
Back to questions
Junior — Middle
62

Каким образом можно выполнить вызов асинхронной функции из синхронного метода?

Companies where asked
Элисофт

Answer from AI

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