我必须从Angular对Web API进行多次调用。问题是这导致线程中出现某种死锁,并且超时返回“任务被取消”。我尝试使用在另一篇文章中找到的ConfigureAwait(false),但它没有解决我的问题。在我的角度控制器,我有:从Angular导致Web API的多个异步调用导致程序挂起
function getClusterLinks(linkCode, returnString) {
var deferred = $q.defer();
$scope.returnString = returnString;
contractorService.gethyperlink(linkCode)
.success(function (data) {
var vchUrl = data[0].vchUrl;
var end = vchUrl.length;
var docID = vchUrl.substring(vchUrl.indexOf("=") + 1, end);
var vchLinkName = data[0].vchLinkName;
var yay = '<a href="" ng-click="getDocumentByID(' + docID + ')">' + vchLinkName + '</a>';
var yCode = "|Y" + linkCode + "~";
$scope.returnString = $scope.returnString.replaceAll(yCode, yay);
deferred.resolve();
})
return deferred.promise;
}
在我的角度服务:
this.gethyperlink = function (id) {
return $http.get('/Home/GetHyperLink?id=' + id)
};
在我的MVC控制器:
public async Task<ActionResult> GetHyperLink(int id)
{
var link = await CommonClient.GetHyperLinkByID(id);
return Json(link, JsonRequestBehavior.AllowGet);
}
在我CommonWebApiClient:
public Task<List<HyperLinkModel>> GetHyperLinkByID(int linkID)
{
try
{
var response = PerformGet<List<HyperLinkModel>>(string.Format("api/GetMyHyperlinks/{0}", linkID.ToString()));
return response;
}
catch (Exception ex)
{
throw ex;
}
}
在我的WebApiClientBase:
protected async Task<T> PerformGet<T>(string requestUri)
{
using (var client = new HttpClient { BaseAddress = _baseAddress })
{
try
{
AppendDefaultHeaders(client);
var response = await client.GetAsync(requestUri).ConfigureAwait(false);
var responseContent = await response.Content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(responseContent);
}
catch (Exception e)
{
throw e;
}
}
}
以上地方挂线是:
var response = await client.GetAsync(requestUri).ConfigureAwait(false);
任何帮助是非常感谢!
你在哪里打电话给PerformGet? – MichaelDotKnox
请参阅我上面的编辑。谢谢! –