我创建了一个使用Web服务(不属于我们的组织)的剃须刀视图。服务呼叫的方式如下:异步请求多次相同的Web服务
- 调用第一个方法,该方法返回一些guid。
- 对于这些指令中的每个,请异步调用第二个服务以返回记录。
我必须使服务方法调用异步进行性能。我遇到的问题是,我目前无法等到所有响应可用,然后再将记录返回到视图。我走了这么远:
方法记录返回Razor视图:
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);
}
}
我如何能等待,直到所有响应任何想法返回列表<>回Razor视图之前接收?
感谢
我认为这可能是一个重复的问题,你看过:http://stackoverflow.com/questions/12337671/using-async-await-for-multiple-tasks – Willwsharp
我没有。感谢您的建议。虽然这不是重复的IMO,因为我的方法不返回任务,所以我没有任何可以处理的事情。 – JimmyB
啊,我没有看到,我的道歉。 – Willwsharp