Отказ от ответственности: мне не нравится решение ConfigureAwait (), потому что я нахожу его не интуитивным и трудно запоминающимся.Вместо этого я пришел к выводу обернуть нежелательные вызовы методов в Task.Run (() => myAsyncMethodNotUsingAwait ()).Кажется, это работает на 100%, но может быть просто условием гонки !?Я не уверен, что происходит, если честно.Этот вывод может быть неправильным, и я рискую своими очками StackOverflow, чтобы, надеюсь, извлечь уроки из комментариев :-P.Пожалуйста, прочитайте их!
У меня просто была проблема, как описано, и я нашел дополнительную информацию здесь .
Заявление: «Вы не можете вызвать асинхронный метод»
await asyncmethod2()
из метода, который блокирует
myAsyncMethod().Result
В моем случае я не мог изменить вызывающий метод, и он не был асинхронным.Но я на самом деле не заботился о результате.Как я помню, это также не сработало при удалении .Result и пропало ожидание.
Итак, я сделал это:
public void Configure()
{
var data = "my data";
Task.Run(() => NotifyApi(data));
}
private async Task NotifyApi(bool data)
{
var toSend = new StringContent(JsonConvert.SerializeObject(data), Encoding.UTF8, "application/json");
await client.PostAsync("http://...", data);
}
В моем случае меня не волновал результатв вызывающем не асинхронном методе, но я предполагаю, что это довольно распространено в этом случае использования.Вы можете использовать результат в вызывающем асинхронном методе.