簡體   English   中英

F#中的異步EF查詢

[英]Asynchronous EF query in F#

在使用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 (類似於C#查詢中的FirstAsync )或其他可靠的解決方案。

您可以使用與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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM