Сбой форм Xamarin с асинхронным вызовом Http - PullRequest
0 голосов
/ 08 июля 2019

Я занимаюсь разработкой приложения Xamarin.Forms (4.1.0), которое выполняет вызовы REST.

При вызове моей веб-службы происходит сбой приложения без исключения.

Только получилэто сообщение на выходе:

07-08 19:09:04.792 F/        (22723): * Assertion at /Users/builder/jenkins/workspace/xamarin-android-d16-1/xamarin-android/external/mono/mono/mini/debugger-agent.c:4387, condition `is_ok (error)' not met, function:get_this_async_id, Could not execute the method because the containing type 'System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1[RestQueryResultT_REF]', is not fully instantiated. assembly:<unknown assembly> type:<unknown type> member:(null)
07-08 19:09:04.793 F/libc    (22723): Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 22723 (io.puffix), pid 22723 (io.puffix)

Вот код:

RestQueryResultT queryResult;

using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(serviceUri))
{
    string result = await response.Content.ReadAsStringAsync();
    queryResult = ParseResult(result);
}

return queryResult;

Вызов сделан из метода обработчика событий, инициируемого действием пользовательского интерфейса.Вызов GetAsync вызвал сбой приложения.

Есть идеи по решению этой проблемы?

1 Ответ

1 голос
/ 09 июля 2019

Это кажется проблемой и уже подано в Github.Вы можете увидеть обсуждения в этих темах:

  1. ожидайте в методе с returntype Задача приводит к сбою приложения
  2. xamarin-android / Issues
  3. xamarin-ios / Issues

Обходной путь использует GetAwaiter().GetResult() вместо await:

Работает:

response = _client.GetAsync(uri).GetAwaiter().GetResult();

Не работает:

await _client.GetAsync(uri);
...