F# EF C ToListAsync在F中的等效值是多少?

F# EF C ToListAsync在F中的等效值是多少?,f#,entity-framework-6,c#-to-f#,F#,Entity Framework 6,C# To F#,我有以下C代码: public async Task<List<Table>> GetRows() { return await db.Table.ToListAsync(); } 其中db是EF 6 DbContext 假设我访问相同的DbContext,如何在F中编写等价的东西 我想出了这个代码,但我被卡住了: let getRows = async { let q = query { from r in db.Table

我有以下C代码:

public async Task<List<Table>> GetRows()
{
  return await db.Table.ToListAsync();
}  
其中db是EF 6 DbContext

假设我访问相同的DbContext,如何在F中编写等价的东西

我想出了这个代码,但我被卡住了:

let getRows = async {
   let q = query { 
         from r in db.Table
             select r
         }
   q |> Seq.map(fun row -> ...) // <-- Here I might want to do some custom function
}

谢谢你

在F中使用.ToListAsync没有问题。我想你困惑的地方是让C wait与F async配合得很好

在这种情况下,应该使用Async.WaitTask 这是密码

async {
    let! q = db.Table.ToListAsync() |> Async.AwaitTask //here you have a C# list
}
如果我正在做的大部分工作都是使用c任务,那么我通常使用。我发现这比在异步和任务之间来回转换更可取,但这取决于所使用的API

从Nuget添加

dotnet添加包TaskBuilder.fs-版本2.1.0 打开并使用任务

打开FSharp.Control.Tasks.V2 任务{ 让!q=db.Table.toListSync }
你是对的。在C端,如何用wait调用这个F函数?昨晚很晚了,我应该换个说法问我的问题。我现在要接受你的答案。我想如果你想用await从C端调用它,那么就没有必要将它包装成async,这对我编写异步F代码很有帮助,而异步F代码只打算从C/VB应用程序中使用。这看起来很不错。