Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous F中的异步EF查询#_Asynchronous_F#_Entity Framework 6 - Fatal编程技术网

Asynchronous F中的异步EF查询#

Asynchronous F中的异步EF查询#,asynchronous,f#,entity-framework-6,Asynchronous,F#,Entity Framework 6,在C#中,使用EF6,我可以轻松地进行如下异步操作: 使用(var context=new MyDbContext()){ var item=await context.SomeEntities.Where(e=>e.Id==1.FirstAsync(); 剂量测定(项目); } 如何使用F#异步工作流实现同样的功能 我知道query工作流以及如何使用它来代替LINQ,但我不知道如何使它正确地异步(即不永久消耗线程池,如在C#示例中)。以下是我到目前为止得到的信息(它是同步的): 我正在寻找一

在C#中,使用EF6,我可以轻松地进行如下异步操作:

使用(var context=new MyDbContext()){
var item=await context.SomeEntities.Where(e=>e.Id==1.FirstAsync();
剂量测定(项目);
}
如何使用F#异步工作流实现同样的功能

我知道
query
工作流以及如何使用它来代替LINQ,但我不知道如何使它正确地异步(即不永久消耗线程池,如在C#示例中)。以下是我到目前为止得到的信息(它是同步的):


我正在寻找一些操作,如
headAsync
(类似于C#query中的
FirstAsync
)或其他可靠的解决方案。

您可以使用与C#中相同的扩展方法


我真傻,没想过。非常感谢。
use context = MyDbContext()
let item = query {
    for e in context.SomeEntities
    where (e.Id = 1)
    head
}
DoSomething item
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