我刚刚开始使用F#和.Net但是经过一些谷歌搜索我没有找到这个例子.如果这太简单,我会提前道歉.
我正在尝试查询数据库并异步执行.例如,我有一个像这样的函数:
let queryExample name =
query {for f in foo do
where (f.name = name)
select f.name}
|> Seq.toList
Run Code Online (Sandbox Code Playgroud)
现在,我将如何制作异步版本?query不返回Async<'a>类型.
答案取决于你所查询的内容.许多数据源都会暴露出类似于数据上下文的内容,这些内容可以以不同的方式运行查询,但这不会直接暴露在IQueryable类型上(因此,您不能直接使用query { ... }表达式的结果.
举个例子,如果你foo是LINQ-to-SQL Table<Foo>,那么你可以这样做:
let queryExample name =
let q =
query { for f in foo do
where (f.name = name)
select f.name }
let cmd = foo.Context.GetCommand(q)
async {
let! reader = Async.AwaitTask (cmd.ExecuteReaderAsync())
return foo.Context.Translate<Foo>(reader)
}
Run Code Online (Sandbox Code Playgroud)
这将返回一个Async<seq<Foo>>.如果您将运行这样的大量查询,那么很容易将其解析为可重用的机制.
| 归档时间: |
|
| 查看次数: |
1041 次 |
| 最近记录: |