public SearchResultModel GetSearchResultAsync(string keyword, bool english, SearchResultModel result) { Task.Run(() => { Parallel.ForEach(this.engines, engine => { base.SearchOnEngine(engine, keyword, english, result); }); result.Finished = true; }); SpinWait.SpinUntil(() => result.Searched > 0 || result.Finished); SearchResultModel newResult = null; try { lock (result) { newResult = result.Copy(); } } catch (Exception e) { Log.Error(e, "catched an exception when copying result."); } return(newResult); }
public SearchResultModel GetSearchResult(string keyword) { if (string.IsNullOrWhiteSpace(keyword)) { return(null); } if (this.cache.TryGetValue(keyword, out SearchResultModel result)) { return(result); } var requestId = Guid.NewGuid().ToString(); result = new SearchResultModel { RequestId = requestId }; cache.Set(requestId, result, _expirationTime); this.cache.Set(keyword, result, _expirationTime); var english = !keyword.HasOtherLetter(); result.Results = new List <SearchResult>(); Parallel.ForEach(this.firstEngines, engine => { base.SearchOnEngine(engine, keyword, english, result); }); Task.Run(() => { Parallel.ForEach(this.secondaryEngines, engine => { base.SearchOnEngine(engine, keyword, english, result); }); result.Finished = true; }); SpinWait.SpinUntil(() => result.Searched > 0 || result.Finished); SearchResultModel newResult = null; try { lock (result) { newResult = result.Copy(); } } catch (Exception e) { Log.Error(e, "catched an exception when copying result."); } return(newResult); }
public SearchResultModel GetSearchResult(string keyword) { if (string.IsNullOrWhiteSpace(keyword)) { return(null); } var requestId = Guid.NewGuid().ToString(); var result = new SearchResultModel { RequestId = requestId }; cache.Set(requestId, result, new TimeSpan(0, 1, 0)); var english = !keyword.HasOtherLetter(); result.Results = new List <SearchResult>(); var logger = NiologManager.CreateLogger(); Task.Run(() => { NiologManager.Logger = logger; Parallel.ForEach(engines, engine => { NiologManager.Logger = logger; SearchPerEngine(engine, keyword, english, result); }); result.Finished = true; }); SpinWait.SpinUntil(() => result.Searched > 0 || result.Finished); SearchResultModel newResult = null; try { lock (result) { newResult = result.Copy(); } } catch (Exception e) { logger.Error() .Message("catched an exception when copying result.") .Exception(e, true) .Write(); } return(newResult); }