public class TestClass
{
public TestClass(int id, string name)
{
Name = name;
Id = id;
}
public string Name
{ get; private set; }
public int Id
{ get; private set; }
public string Tag
{ get; set; }
public DateTime Time
{ get; set; }
}
private static void Main(string[] args)
{
List<TestClass> list = new List<TestClass>();
for (int i = 0; i < 5; i++ )
{
TestClass t = new TestClass(i, Guid.NewGuid().ToString());
t.Tag = i%2 == 0?"Hello":"World";
list.Add(t);
}
var query = list
.GroupBy(l=>l.Tag);
Func<IEnumerable<IGrouping<string, TestClass>>, int[]> func = GetIds<string,TestClass>;
func.BeginInvoke(query, null, null);
Console.Read();
}
private static int[] GetIds<T, U>(IEnumerable<IGrouping<T, U>> query)
{
List<int> ints = new List<int>();
foreach(var y in query)
ints.Add(y.Count());
return ints.ToArray();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道LINQ不会执行,直到集合被迭代,但我只是想确保我可以假设它仍然成立,即使查询被传递给另一个方法async.
Jon*_*eet 16
是的,查询执行仍然是延期的.查询只是对实现的引用,而实现IEnumerable<T>又知道另一个实现IEnumerable<T>(以及用于过滤,分组等的适当委托).
请注意,如果您再次迭代它(在任何线程中)将再次执行查询.查询引用知道如何获取数据 - 它不知道数据本身.