【发布时间】:2023-04-07 03:44:01
【问题描述】:
在使用以下调用保存更改时,我想等待 Entity Framework Core 返回的 Task<int>:myDbContext.SaveChangesAsync true
我找到了至少 3 种不同的方法来实现这一目标,但我不确定哪一种是最好的,因为我并不真正关心 Task<int> 中的 int 结果部分,在一天结束时我只是想等待。
使用Async.AwaitIAsyncResult 然后Async.AwaitIgnore 忽略Task<bool>:
async {
do! myDbContext.SaveChangesAsync true
|> Async.AwaitIAsyncResult
|> Async.AwaitIgnore
}
将Task<int> 向上转换为Task,然后等待Task 与Async.AwaitTask:
async {
do! myDbContext.SaveChangesAsync true
:> Task
|> Async.AwaitTask
}
用Async.AwaitTask 等待Task<int> 并用Async.Ignore 忽略结果
async {
do! myDbContext.SaveChangesAsync true
|> Async.AwaitTask
|> Async.Ignore
}
AwaitIAsyncResult 似乎更相关,如果我想在等待任务时获取一个布尔值以防出错(和/或我想通过超时来控制执行):https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/async.awaitiasyncresult-method-%5Bfsharp%5D?f=255&MSPPError=-2147217396。我也怀疑这是正确的,如果我想避免在等待时出现问题而将异常抛出到我的脸上,而是获取一个布尔值。
剩下的还有其他两个解决方案,我想说最后一个更好地表达了我不关心Task<int> / Async<int> 的int 的意图。
但是我不太确定,有人可以验证或无效我的想法吗?
【问题讨论】:
标签: f# async-await task f#-async