在我读了一堆LINQ相关的东西之后,我突然意识到没有文章介绍如何编写异步LINQ查询.
假设我们使用LINQ to SQL,下面的语句很清楚.但是,如果SQL数据库响应缓慢,则使用此代码块的线程将受到阻碍.
var result = from item in Products where item.Price > 3 select item.Name;
foreach (var name in result)
{
Console.WriteLine(name);
}
Run Code Online (Sandbox Code Playgroud)
似乎当前的LINQ查询规范不提供对此的支持.
有没有办法做LINQ异步编程?当结果准备好使用而没有I/O上的任何阻塞延迟时,它就像有一个回调通知.
我对C#中的动态特性感到非常兴奋(C#4动态关键字 - 为什么不呢?),特别是因为在我的代码的某些库部分我使用了很多反射.
我的问题是双重的:
1."动态"取代泛型,如下面的情况?
泛型方法:
public static void Do_Something_If_Object_Not_Null<SomeType>(SomeType ObjToTest) {
//test object is not null, regardless of its Type
if (!EqualityComparer<SomeType>.Default.Equals(ObjToTest, default(SomeType))) {
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
动态方法(??):
public static void Do_Something_If_Object_Not_Null(dynamic ObjToTest) {
//test object is not null, regardless of its Type?? but how?
if (ObjToTest != null) {
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
2."动态"现在是否允许方法返回匿名类型,如下面的情况?:
public static List<dynamic> ReturnAnonymousType() {
return MyDataContext.SomeEntities.Entity.Select(e => e.Property1, e.Property2).ToList();
}
Run Code Online (Sandbox Code Playgroud)
很酷,欢呼
编辑:
仔细考虑了我的问题,并根据答案,我看到我完全搞砸了主要的通用/动态问题.他们的确完全不同.所以是的,感谢所有的信息.
那么第2点怎么样?