來電的功能是它可以做到以下要求在C#4.0異步回從foreach循環
電流: 我有一個數據提供者類查詢DB/XML/ExternalDataSource 如下圖所示,函數PerformQuery需要兩個參數並返回一個Result類型的列表。
在我的客戶端應用程序中,DataProvider實例調用PerformQuery將創建列表並返回。
目標: 如果PerformQuery的查詢結果更多(例如100K),那麼用戶將不得不等待。 所以我可以創建一個backgroundworker,並通過PerformQuery返回列表。
但我想知道PerformQuery是否可以將其foreach語句中的每個項目返回給同步或異步模式的調用者函數。而不是等待在foreach語句中構建整個列表,然後再次在客戶端應用程序中處理列表。
來電 - > PerformQuery(a,b) ^ |^ | | | |將每個結果項目發回給呼叫者功能。 < --------- <
class DataProvider { public List PerformQuery(string param1, string param2) { List m_res = new List(); var m_queryRes = DataAccessor.GetResults(param1, param2); foreach(var res in m_queryRes) { Result result = new Result(); result.Name = res.FirstName + res.SecondName; result.Code = res.Code + "Some business logic"; m_res.Add(result); } return m_res; } } class Result { Property Name; Property Code; }
應該注意的是,當您調用DataAccessor.GetResults()時,會出現重大的性能下降。 – 2012-03-13 18:11:27