У меня есть конструктор, который вызывается в потоке пользовательского интерфейса в моем приложении WPF.Внутри него он вызывает асинхронный метод, но это должно выполняться синхронно.Я попытался подождать, но это вызвало тупик, и я понимаю, почему.Поэтому я ввел аргумент, который указывает, должен ли метод выполняться асинхронно или синхронно.Примерно так:
// constructor that is called on UI thread
public MyClass()
{
Method1(false).Wait();
}
public async Task Method1(bool runAsync)
{
await Method2(runAsync);
}
public async Task Method2(bool runAsync)
{
if (runAsync)
{
await Task.Run(() => Thread.Sleep(1000));
}
else
{
Thread.Sleep(1000);
}
}
Я не хочу использовать ConfigureAwait, потому что я хочу, чтобы все работало в потоке пользовательского интерфейса.Will Method1 (false) .Wait ();когда-либо вызывать тупик (это безопасно использовать)?Я много тестировал, но это не так, но я не уверен.Наконец, мой реальный вопрос: если 'await Task.Run (...' никогда не выполняется, мой метод полностью синхронен? Я нашел несколько сообщений на эту тему, но ни один из них не отвечает прямо на мой вопрос.