是否可以在C#4.0中执行以下要求
当前 我有一个数据提供程序类,用于查询DB / XML / ExternalDataSource 如下所示,函数PerformQuery接受两个参数并返回Result类型列表。
在我的客户端应用程序中,DataProvider调用PerformQuery的实例将创建列表并返回。
目的: 如果PerformQuery的查询结果更多(例如100K),那么用户将不得不等待。 所以我可以创建一个后台工作程序和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; }
答案 0 :(得分:3)
您应该考虑使用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;
}