在使用 EF6 的 C# 中,我可以轻松地进行如下异步操作:
using (var context = new MyDbContext()) {
var item = await context.SomeEntities.Where(e => e.Id == 1).FirstAsync();
DoSomething(item);
}
我如何对 F# 异步工作流程执行相同操作?
我知道query
工作流程以及如何使用它代替 LINQ,但我不知道如何使其正确异步(即不永久消耗线程池,就像在 C# 示例中一样)。这是我到目前为止所得到的(它是同步的):
use context = MyDbContext()
let item = query {
for e in context.SomeEntities
where (e.Id = 1)
head
}
DoSomething item
我正在寻找类似的操作headAsync
(类似于FirstAsync
在 C# 查询中)或其他可靠的解决方案。
您可以使用在 C# 中使用的相同扩展方法。
open System.Data.Entity
let asyncQuery = async {
return!
query {
for e in context.SomeEntities do
where (e.Id = 1)
select e}
|> QueryableExtensions.FirstAsync
|> Async.AwaitTask
}
let result = Async.RunSynchronously asyncQuery
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)