等待通用任务和 return 结果

await generic Task and return the result

我有函数调用

let result = session.Query<Domain.CustomerReadModel>().ToListAsync()

其中 returns Task<Collections.Generic.IReadOnlyList<Domain.CustomerReadModel>>

如何在 F# 中正确地“等待”这个任务?

我试过了

async {
   session.Query<Domain.CustomerReadModel>().ToListAsync() |> ignore
}

以及

let result = session.Query<Domain.CustomerReadModel>().ToListAsync()
  |> Async.AwaitTask
  |> Async.RunSynchronously

这似乎可以编译,但我不能使用结果 return 它:

session.Query<Domain.CustomerReadModel>().ToListAsync()
    |> Async.AwaitTask
    |> Async.RunSynchronously

Async.AwaitTask 接受任务,将其包装在 async 计算中,然后 returns 你进行计算。一旦你拥有它,你就可以将它与 let!do!return! 一起使用,就像任何其他 async 计算一样。

async {
  let queryAsFsharpAsync = session.Query<Domain.CustomerReadModel>().ToListAsync() |> Async.AwaitTask
  let! result = queryAsFsharpAsync 
  ...
}

或者不给计算自己的名字:

async {
  let! result = session.Query<Domain.CustomerReadModel>().ToListAsync() |> Async.AwaitTask
  ...
}