У меня есть целевая страница на веб-сайте, над которым я работаю, и на действие для этой страницы вызывается несколько асинхронных веб-вызовов, чтобы кэшировать результаты на потом. Тем не менее, я хочу, чтобы до завершения вызовов дошли до следующего действия. В принципе у меня есть:Асинхронные вызовы - как подождать их в потоке пользовательского интерфейса
GetParticipantInfo(planID, partID);
SetCurrentInvestments(partID, planID);
GetLoanFunds(planID, partID);
и каждая из них делится так:
public void GetParticipantInfo(string planNumber, string participantID)
{
IAsyncResult _IAsyncResult;
List<string> parameter = new List<string>();
parameter.Add(planNumber);
parameter.Add(participantID);
GetParticipantInfo_A _GetParticipantInfo_A = new GetParticipantInfo_A(GetParticipantInfoAsync);
_IAsyncResult = _GetParticipantInfo_A.BeginInvoke(participantID, planNumber, serviceContext, GetParticipantInfoAsyncCallBack, parameter);
}
public ParticipantDataModel GetParticipantInfoAsync(string planNumber, string partId, ServiceContext esfSC)
{
ParticipantDataModel pdm = new ParticipantDataModel();
return pdm;
}
private void GetParticipantInfoAsyncCallBack(IAsyncResult ar)
{
try
{
AsyncResult result;
result = (AsyncResult)ar;
string planID = ((List<string>)ar.AsyncState)[0];
GetParticipantInfo_A caller = (GetParticipantInfo_A)result.AsyncDelegate;
ParticipantDataModel pdm = caller.EndInvoke(ar);
_cacheManager.SetCache(planID, CacheKeyName.GetPartInfo.ToString(), pdm);
}
catch (Exception ex)
{ }
}
Таким образом, вопрос, как настроить поток пользовательского интерфейса, чтобы ждать на звонки, чтобы закончить, прежде чем двигаться дальше к чему-то еще?
В ответ на Джо:
Итак, предполагая, что все они возвращают AsyncResult, я мог сделать что-то вроде:
List<IAsyncResult> results;
//After each call
result = OneOfTheAsyncCalls();
results.Add(result);
foreach(IAsyncResult result in results)
{
result.AsyncWaitHandle.WaitOne();
}
Или это заказ будет дело?
Вы ищете C# 5 – SLaks