c# – 异步多次请求相同的Web服务
发布时间:2020-12-15 22:28:32 所属栏目:百科 来源:网络整理
导读:我正在创建一个使用Web服务(不属于我们的组织)的剃刀视图.服务调用的方式如下: 调用第一个方法,返回一些guid. 对于每个guid,异步调用第二个服务以返回记录. 我必须异步调用服务方法以获得性能.我遇到的问题是,在将记录返回到视图之前,我目前无法等待所有响
我正在创建一个使用Web服务(不属于我们的组织)的剃刀视图.服务调用的方式如下:
>调用第一个方法,返回一些guid. 我必须异步调用服务方法以获得性能.我遇到的问题是,在将记录返回到视图之前,我目前无法等待所有响应都可用.我到目前为止: 将记录返回到剃刀视图的方法: public List<ProactisContract> GetContractsList() { List<Guid> contractIds = GetAmendedContracts(); GetContractDetails(contractIds); //Test System.Threading.Thread.Sleep(5000); return _contractList; } 这是从第一次调用循环guid的第二种方法,为每条记录发出服务请求: private void GetContractDetails(List<Guid> contractIds) { foreach (var recId in contractIds) { var request = new GetContractDetailsRequest { Authentication = _authorisation,ContractGuid = recId,ContractNumber = "string",SummaryOnly = true }; AsyncCallback asyncCallback = GetContractDetailsCallBack; _service.BeginGetContractDetails(request,asyncCallback,_service); } } private void GetContractDetailsCallBack(IAsyncResult asyncResult) { var response = _service.EndGetContractDetails(asyncResult); lock (_contractList) { var contract = new ProactisContract { /*Assign property values*/ }; _contractList.Add(contract); } } 关于如何在返回列表之前等待所有响应的任何想法<>回到剃刀视图? 谢谢 解决方法
您可以创建一个等于contractIds长度的全局计数器变量,然后每次回调结束时,将计数器减1,然后执行
while (counter != 0) { } 你正在睡觉的地方. 无论如何绝对不是一个优雅的解决方案,但我认为它会起作用.我相信这里的其他人会提供更好的解决方案,但在此期间,我的应该解决你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |