private object[] Perform( int nCallStartIndex, int nCount, AsyncCallback callBack, bool needResults) { object[] Results = new object[nCount]; IAsyncResult[] ars = new AsyncResult[nCount]; for (int i = 0; i < nCount; i++) { CallEntry oCall = (CallEntry)m_oCallEntries[i + nCallStartIndex]; ars[i] = oCall.BeginInvoke(callBack, oCall); } if (callBack == null && needResults) { for (int i = 0; i < nCount; i++) { CallEntry oCall = (CallEntry)m_oCallEntries[i + nCallStartIndex]; Results[i] = oCall.EndInvoke(ars[i]); } } return(Results); }
public object[] Perform(AsyncCallback callBack, bool needResults) { int nCurrCallIndex = 0; List <object> finalResults = new List <object>(); object[] Results; while (nCurrCallIndex < m_oCallEntries.Count) { int nThreads = GetThreadsToUse(); if (nThreads > 1) { // Invoke asynchronously int nCount = Math.Min( nThreads, m_oCallEntries.Count - nCurrCallIndex); Results = Perform(nCurrCallIndex, nCount, callBack, needResults); nCurrCallIndex += nCount; } else { // Invoke synchronously CallEntry oCall = (CallEntry)m_oCallEntries[nCurrCallIndex]; Results = new object[] { oCall.Invoke() }; nCurrCallIndex++; } foreach (object result in Results) { finalResults.Add(result); } } return(finalResults.ToArray()); }
public void Add(Delegate pfDelegate, object[] Params) { CallEntry oCallEntry = new CallEntry(pfDelegate, Params); m_oCallEntries.Add(oCallEntry); }