Задача состоит в том, чтобы заблокировать пользовательский интерфейс вместо получения строки - PullRequest
1 голос
/ 17 апреля 2020

У меня есть веб-форма: когда я нажимаю кнопку, она вызывает метод, который вызывает веб-службу, но после выполнения веб-вызова метод не возвращает строку и пользовательский интерфейс постоянно загружается.

Код веб-формы выглядит следующим образом:

Task<string> result = TheWebService.SendWebRequest();
Output.Text = result.Result; //an aspx Literal control

Код веб-службы выглядит следующим образом:

public async Task<string> SendWebRequest()
{       
   response = await client.PostAsync(request);

   if (response.IsSuccessStatusCode)
   {
     return "1";
   }
   else
   {
     return "2";
    }
}

Output.Text = result.Result; никогда не выполняется, и вместо этого страница загрузка бесконечная. Что мне нужно изменить в моем коде, чтобы результат отображался на странице?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2020

Не блокировать на асин c код . Вместо Result, используйте async полностью .

Веб-формы в настоящее время очень устарели, поэтому использование async не так уж просто. Вам нужно установить Page.Async на true и затем зарегистрировать свою асинхронную задачу, используя PageAsyncTask.

0 голосов
/ 17 апреля 2020

Попробуйте изменить свой код, чтобы предотвратить тупик:

Output.Text = TheWebService.SendWebRequest().GetAwaiter().GetResult();
response = await client.PostAsync(request).ConfigureAwait(false);

Но вы должны знать, что это просто обходной путь. Код работает синхронно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...