public static IAsyncResult BeginSearch <T>(GoogleSearchRequest request, int resultCount, AsyncCallback callback, object state) { var searchAsyncResult = new SearchAsyncResult <T>(state); RunSearch(searchAsyncResult, request, 0, resultCount, callback); return(searchAsyncResult); }
private static void RunSearch <T>(SearchAsyncResult <T> searchAsyncResult, GoogleSearchRequest request, int start, int restCount, AsyncCallback callback) { if (restCount > 0) { var resultSize = restCount > 4 ? ResultSize.Large : ResultSize.Small; BeginGetResponseData( request, start, resultSize, ar => { try { ISearchData <T> searchData; try { searchData = EndGetResponseData <T>(ar); } catch (GoogleServiceException ex) { if (ex.ResponseStatus == ResponseStatusConstant.OutOfRangeStatus) { FinishSearch(searchAsyncResult, callback); return; } throw; } var count = Math.Min(searchData.Results.Length, restCount); if (count == 0) { FinishSearch(searchAsyncResult, callback); } else { searchAsyncResult.Result.AddRange(searchData.Results.Take(count)); RunSearch(searchAsyncResult, request, start + count, restCount - count, callback); } } catch (Exception ex) { searchAsyncResult.Exception = ex; FinishSearch(searchAsyncResult, callback); } }, null); } else { FinishSearch(searchAsyncResult, callback); } }
private static void FinishSearch <T>(SearchAsyncResult <T> searchAsyncResult, AsyncCallback callback) { try { callback(searchAsyncResult); } finally { searchAsyncResult.Complete(); } }