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.