c# –HttpClient.GetAsync永远不会在Xamarin.Android上返回

c# –HttpClient.GetAsync永远不会在Xamarin.Android上返回,第1张

概述我正在开发一个Android应用程序,由Azure上托管的ASP.NETCore应用程序提供支持.我在使用Xamarin.Forms(仅限Android)项目的功能之前,正在使用共享库项目来测试控制台应用程序项目的基本内容.登录到Web服务后运行以下代码,其中Client是HttpClient:publicstaticasyncTask<MyClas

我正在开发一个Android应用程序,由Azure上托管的ASP.NET Core应用程序提供支持.我在使用Xamarin.Forms(仅限AndroID)项目的功能之前,正在使用共享库项目来测试控制台应用程序项目的基本内容.
登录到Web服务后运行以下代码,其中ClIEnt是httpClIEnt:

public static async Task<MyClass> GetinformationAsync(string accountID){    httpResponseMessage response = await ClIEnt.GetAsync(UrIData + "/" + accountID);    response.EnsureSuccessstatusCode();    string responseContent = await response.Content.ReadAsstringAsync();    return JsonConvert.DeserializeObject<MyClass>(responseContent);}

在同一台计算机/网络下,代码在Console应用程序上完成不到一秒钟,然而,它在Xamarin.Forms.AndroID项目中永远不会完成(甚至等待一分钟).
我发现这很奇怪,因为AndroID客户端可以使用PostAsync成功登录到Web服务.

但是,AndroID客户端和控制台客户端如何调用GetinformationAsync有所不同.

而Console客户端异步调用它:

 private static async voID TestDataDownload() {      ...      var data = await Webapiclient.GetinformationAsync(myID); }

AndroID客户端同步调用它

 public voID MainPage() {      ...      var data = Webapiclient.GetinformationAsync(myID).Result; }

解决方法:

看起来你遇到了某种僵局.您可能希望将代码包含在实际调用GetinformationAsync的位置,因为它可能是问题源所在的位置.

您可以通过以下方式解决问题:

>不以同步方式调用GetinformationAsync
>使用ConfigureAwait(false)将GetinformationAsync中的异步调用后缀为不在每个方法调用上切换上下文.

所以你的GetinformationAsync方法看起来像:

public static async Task<MyClass> GetinformationAsync(string accountID){    var response = await ClIEnt.GetAsync(UrIData + "/" + accountID).ConfigureAwait(false);    response.EnsureSuccessstatusCode();    var responseContent = await response.Content.ReadAsstringAsync().ConfigureAwait(false);    return JsonConvert.DeserializeObject<MyClass>(responseContent);}

然后,如果你在某个地方调用它,你需要它返回相同的上下文,即.如果您需要更新UI:

var myClass = await GetinformationAsync(accountID);// update UI here...

否则,如果您不需要返回相同的上下文:

var myClass = await GetinformationAsync(accountID).ConfigureAwait(false);
总结

以上是内存溢出为你收集整理的c# – HttpClient.GetAsync永远不会在Xamarin.Android上返回全部内容,希望文章能够帮你解决c# – HttpClient.GetAsync永远不会在Xamarin.Android上返回所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1119781.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存