- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在开发一个 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);
}
在同一台计算机/网络下,代码在控制台应用程序中不到一秒即可完成,但是,它在 Xamarin.Forms.Android
项目中从未完成(甚至等待一分钟)。
我觉得这很奇怪,因为 Android 客户端可以使用 PostAsync
成功登录到 Web 服务。
但是,Android 客户端和控制台客户端调用 GetInformationAsync
的方式有所不同。
当控制台客户端异步调用它时:
private static async void TestDataDownload()
{
...
var data = await WebApiClient.GetInformationAsync(myId);
}
Android客户端同步调用
public void MainPage()
{
...
var data = WebApiClient.GetInformationAsync(myId).Result;
}
最佳答案
您似乎遇到了某种僵局。您可能希望在实际调用 GetInformationAsync
的地方包含代码,因为它可能是问题根源所在。
您可能可以通过以下方式解决您的问题:
GetInformationAsync
GetInformationAsync
中使用 ConfigureAwait(false)
后缀您的异步调用,以便在每个方法调用时不切换上下文。因此您的 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 上返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088542/
我想知道为什么当我在 postman 中尝试它有数据返回时它返回空值。这是我的代码。 public async Task> GetUserJobs(LoginResult token) { v
我有一个要测试的 API。这是一个方法的签名... [HttpGet("{param}")] public async Task Get(string param, string param2) {
我有一个函数可以从 Web 服务获取大量 JSON。该数据有时可能很大,达到千兆字节。我的通话如下所示。 try { using (var ht
使用 VS 2017 社区。 azure 。 我有 Azure 设置,我创建了一个空白 Web 应用程序仅用于测试目的。 我的实际站点是 Angular2 MVC5 站点,当前在本地运行。 以下代码应
我是新手,如果这是一个愚蠢的问题,我很抱歉。 我正在尝试创建 Office 插件的一些操作。 我想要它做的是获取您正在撰写的 session 的开始时间并将其放入 HTML div 中。这是我的 .j
如果这个问题之前已经被回答过,我很抱歉,但没有一个答案对我有帮助。我的 WebView 有一个事件: private async void MainWebView_UnviewableContentI
我有大量的异步请求。在某些时候,当应用程序被停用(暂停)时,我需要取消所有请求。我正在寻找一种解决方案来取消异步方法之外的请求。有人可以指出我正确的方向吗? 这是代码块。 异步方法: public a
当使用 Postman 测试我的 Web API 时,我的 API 执行得很好! 当谈到在我的客户端应用程序中使用 HttpClient 运行代码时,代码执行时没有错误,但在服务器上没有预期的结果。会
我使用MVVM-Light开发通用应用。 在一个页面上,有一个来自 WebService 的评论列表。如果当前用户是评论的作者,我会显示一个 FlyoutMenu 允许他“编辑”或“删除”其评论。还有
我一直在尝试构建一个作为 WebService 运行的 Windows ConsoleApp 来来回同步一些数据我已经构建了一个用于同步的项目,当我在我的 wpf 项目中运行它时它似乎可以工作但事实并
我对 web 服务和 rest 还很陌生,目前正在研究 servicestack。 我有以下有效的代码: var response = client.Get(SettingsManager.getMe
当使用 HttpClient 并执行 PostAsync 时,我能够添加与 HttpContent 的契约(Contract)。例如 HttpContent content = new ObjectC
我们有一个面向微服务的后端堆栈。所有构建在 Nancy 之上的微服务并使用 topshelf 注册为 Windows 服务. 处理大部分流量(~5000 请求/秒)的服务之一开始在 8 台服务器中的
我目前正在使用 HttpWebRequest 获取网站。我想使用 HttpWebRequests 未提供的等待模式。我找到了 HttpClient 类,它似乎是新的 Http worker 类。我正在
我有一个托管在 Azure 中的 ASP.NET WebApi。它没有基于 HTTP header 或 Azure API 身份验证,并且 fiddler session 证明该 API 功能齐全,并
我有一个使用 Office Javascript API 开发的 Outlook 插件。 它会查看正在撰写的新电子邮件,并根据收件人执行操作:https://learn.microsoft.com/e
我不熟悉async/await到底是如何工作的。为了更好地理解它,我创建了下面的示例代码: static void Main(string[] args) { GetA
我不熟悉async/await到底是如何工作的。为了更好地理解它,我创建了下面的示例代码: static void Main(string[] args) { GetA
所以我在关注 tutorial to build an Outlook Add-in .但是,该演示不显示消息的 body。 我还从文档中了解到,我可以调用 getAsync 来访问正文,但它不起作用
我有一个服务使用 HttpClient 类从其他服务获取一些资源。作为我们性能测试的一部分,我们模拟了 HttpClient.GetAsync() 调用以从外部服务中删除依赖项,并将其替换为从本地磁盘
我是一名优秀的程序员,十分优秀!