Почему комбинация вызова метода асинхронного вызова с и без ConfigureAwait (false) работает с Task.Run (() = & gt; Operation ()). Результат [дубликат]

У меня была такая же проблема, как вы, и я использовал RadAutoCompleteBox . Он имеет множество клиентских и серверных событий, которые помогают вам справляться с различными ситуациями. Это очень удобно для проектов ASP.NET.

0
задан svick 17 April 2014 в 12:18
поделиться

1 ответ

Я считаю, что вы видите тупик, хотя я не уверен, как это доказать.

HttpClient на большинстве платформ правильно использует ConfigureAwait(false) внутри, но на нескольких платформах это не так. Я считаю, что WP8 является одним из тех, кто этого не делает. Это означает, что вы можете использовать ConfigureAwait(false) все, что хотите, но HttpClient все равно может вызвать тупик.

Лучшее решение - полностью асинхронно. Но если это невозможно, тогда приходят в голову две альтернативы:

  1. Нажимайте HttpClient на фоновый поток.
    public Byte[] A()
    {
      var task = Task.Run(() => BAsync());
      return task.GetAwaiter().GetResult();
    }
    
  2. Установите вложенный цикл в потоке переднего плана для выполнения любой асинхронной работы.
    public Byte[] A()
    {
      return AsyncContext.Run(() => BAsync());
    }
    
    Обратите внимание, что AsyncContext из моей библиотеки AsyncEx . I полагаю, что AsyncContext должен работать на WP8, но я на самом деле не использовал его на этой платформе.
4
ответ дан svick 5 September 2018 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: