Xamarin Forms因异步Http调用而崩溃

时间:2019-07-08 17:18:16

标签: c# xamarin.forms async-await xamarin-forms-4

我正在开发Xamarin.Forms(4.1.0)应用,该应用可以进行REST调用。

调用我的Web服务时,应用程序崩溃,无一例外。

仅在输出上显示此消息:

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;

该调用是由事件处理程序方法进行的,由UI操作触发。 GetAsync调用使应用程序崩溃。

有解决这个问题的主意吗?

2 个答案:

答案 0 :(得分:1)

这似乎是一个问题,已经在Github中提出。您可以在以下主题中查看讨论:

  1. await within method with returntype Task makes app crash
  2. xamarin-android/issues
  3. xamarin-ios/issues

解决方法是使用GetAwaiter().GetResult()而不是await

作品:

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

不起作用:

await _client.GetAsync(uri);

答案 1 :(得分:1)

您可以尝试使用较小的响应吗?我遇到了同样的问题(在我的情况下,当我从服务器上测试了2或3条记录时,它工作正常,但如果我使用10条记录,则崩溃了)。我不得不更换模拟器。我现在正在使用连接到计算机的真实电话。