异步回从foreach循环
来电的功能是它可以做到以下要求在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; }
您应该考虑使用iterators,迭代器你可以根据呼叫方的请求时返回的每个元素。
class DataProvider
{
public System.Collections.IEnumerable<Result> PerformQuery(string param1, string param2)
{
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";
yield return result;
}
}
}
class Result
{
Property Name;
Property Code;
}
对不起,我的延迟响应..有几天有限的互联网接入。 – 2012-03-20 02:31:50
真的很有效力:一角钱...... :-)坦克一百万.. – 2012-03-20 02:32:30
应该注意的是,当您调用DataAccessor.GetResults()时,会出现重大的性能下降。 – 2012-03-13 18:11:27