我創建了一個使用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