“.Result”似乎没有同步行动

问题描述 投票:0回答:1

我有一个API调用,它使用.Result来同步操作。

HttpResponseMessage response = client.PostAsync("api/updatelastname", new StringContent(string.Format("UserId={0}&LastName={1}", userId, lastName),  Encoding.UTF8, "application/x-www-form-urlencoded")).Result;

要查看API是否已成功完成,请在继续之前使用以下if..then语句。

if (!response.IsSuccessStatusCode)
{
  // Something went wrong
}

令我困惑的是,有时api调用完成没有问题,然后有时它没有。似乎有时代码不等待API调用完成,因此response.IsSuccessStatusCodefalse

理想情况下,我认为最好在API调用中使用async方法并使用await关键字,但Web应用程序目前仅针对.NET 4,并且在.NET v4.5之前不支持asyncawait

在检查response.IsSuccessStatusCode之前,有关如何确保API调用完成的任何想法?没有转向.NET v4.5 +?

post asynchronous c#-4.0 async-await
1个回答
1
投票

Web应用程序目前仅针对.NET 4,直到.NET v4.5才支持异步和等待。

它是需要支持PostAsync的客户端(调用await的客户端,而不是Web应用程序)。我假设您的意思是客户端是一个Web应用程序。

有时api调用完成没有问题,然后有时它没有。

有时它没有完成,你的意思是?在,代码永远不会从Result返回?

在某些情况下,Result将陷入僵局,但我很惊讶在ASP.NET上找到一个(据我所知,所有ResultHttpClient的死锁仅在某些移动平台上)。

似乎有时代码不会等待API调用完成,因此response.IsSuccessStatusCode为false。

您怀疑的是不可能的。 Result将阻止,直到HTTP请求完成。如果IsSuccessStatusCode返回false,那那是因为API返回了一个非成功状态代码。

© www.soinside.com 2019 - 2024. All rights reserved.