В настоящее время я использую делегат для создания асинхронных вызовов в цикле for, проблема, с которой я сталкиваюсь, - как узнать, когда эти асинхронные вызовы завершены?Асинхронные вызовы с делегатом
, например:
public delegate string GetMergeSectionCaller(string something1, out int threadId);
public Dataset GetDataset (param1, param2) {
int threadId;
Dataset ds = new Dataset;
using (myConnection) {
myConnection.StartConnection();
GetMergeSectionCaller caller = new GetMergeSectionCaller(GetMergeSection);
foreach (var r in anObjectList) {
IAsyncResult result = caller.BeginInvoke(r.ToString(), out threadId, null, null);
}
//I want to do here is wait for the above every single foreach BeginInvoke to finish; then do the below job
ds = GetFinalData();
}
//do more thing to ds here;
return ds;
}
public void GetMergeSectionCaller(string something1, out int threadId) {
//doing superlong long job
//in my actual case, it's actually inserting data to db etc
Thread.Sleep(5000);
threadId = Thread.CurrentThread.ManagedThreadId;
}
, так что я пробовал различные подходы; такие как передача обратного вызова к моему BeginInvoke и EndInvoke там, но все же - мне не хватает способа остановить остальную часть кода, чтобы запустить, прежде чем я смог закончить foreach;
Возможно, мне не хватает чего-то довольно простого? ... Может ли кто-нибудь, пожалуйста, показать мне полный рабочий образец, основанный на моем состоянии?
Упомянуть, какой язык программирования это поможет. – JJJ
просто редактирование названия: в C# – nerrad