Я делаю некоторую OAuth работу, где я получаю свой токен обновления через метод при условии асинхронной API (GetRefreshTokenAsync):Получения асинхронного результата запирания (несмотря на настройки Configure ждет ложь)
public async Task<Tokens> RenewAuthentication()
{
AppTokenResult token = await OAuth.GetRefreshTokenAsync("clientid",
"clientsecret",
@"myRefreshToken");
string accessToken = token.AccessToken;
string refreshToken = token.RefreshToken;
return new Tokens(accessToken, refreshToken);
}
Если я называю это как от метода, не асинхронном как таковой:
public void noAsync()
{
var r = RenewAuthentication();
var x = r.Result;
}
это ТУПИКИ приложение :(Если удалить 2-ой линии (r.Result), то это работает, но это дерьмо, потому что я не могу получить. Я попытался прочитать
http://blog.stephencleary.com/2012/07/dont-block-on-async-code.html
Но, попробовав свой метод 1, добавив в метод GetRefreshTokenAsync() методConfigureAwait (false), это не имело никакого значения.
Любые советы?
Итак, пользовательский интерфейс должен работать, пока результат не получен? – Thulur
Какая платформа работает? Консоль, WPF, iOS, ASP.NET ...? И почему вы вызываете метод async из синхронизации?Рекомендация - использовать async от начала до конца. – Krumelur
Пользовательский интерфейс может работать или не работать во время получения результата. Хотя я бы предпочел, чтобы пользовательский интерфейс был заблокирован, это не настоящая проблема, верно? Проблема в том, что все дело в тупике. Работает на WinForms. Я вызываю async из загрузки формы. Когда форма сначала загружается, я хочу и дать пользователю OAuth, чтобы я мог хранить свои жетоны. – Prof