gpt4 book ai didi

f# - 我什么时候应该使用 Async.AwaitIAsyncResult 而不是 Async.AwaitTask 来等待任务?

转载 作者:行者123 更新时间:2023-12-05 01:31:18 25 4
gpt4 key购买 nike

我想等待 Task<int>使用以下调用保存更改时由 Entity Framework Core 返回:myDbContext.SaveChangesAsync true
我找到了至少 3 种不同的实现方式,但我不确定哪一种是最好的,因为我并不真正关心 int结果部分在 Task<int> ,在一天结束时,我只想等待。

使用 Async.AwaitIAsyncResult然后 Async.AwaitIgnore忽略 Task<bool> :

async {
do! myDbContext.SaveChangesAsync true
|> Async.AwaitIAsyncResult
|> Async.AwaitIgnore
}

上投 Task<int>Task然后就在等待 TaskAsync.AwaitTask :

async {
do! myDbContext.SaveChangesAsync true
:> Task
|> Async.AwaitTask
}

等待 Task<int>Async.AwaitTask并忽略 Async.Ignore 的结果

async {
do! myDbContext.SaveChangesAsync true
|> Async.AwaitTask
|> Async.Ignore
}
AwaitIAsyncResult如果我想在等待任务时出现错误时获取一个 bool 值似乎更相关(和/或我想通过超时对执行进行一些控制): https://msdn.microsoft.com/en-us/visualfsharpdocs/conceptual/async.awaitiasyncresult-method-%5Bfsharp%5D?f=255&MSPPError=-2147217396 .我也怀疑如果我想避免在等待时出现问题时向我的脸上抛出异常,而是获取一个 bool 值,这是正确的。

然后剩下两个其他解决方案,我想说最后一个解决方案更好地表达了我不关心 int 的意图。的 Task<int>/ Async<int> .

但是我不太确定,有人可以验证或否定我的想法吗?

最佳答案

界面 IAsyncResult是 .NET 上异步早期的遗留物(请记住 FileStream.BeginRead/FileStream.EndRead ),因此它仅在与遗留 API 互操作时使用。

事实Async.AwaitIAsyncResult返回 Async<bool>并不意味着它以任何方式处理异常,事实上它没有。

所以与 Async.AwaitIAsyncResult顺便说一句,我会说你的第三个例子

async {
do! myDbContext.SaveChangesAsync true
|> Async.AwaitTask
|> Async.Ignore
}

是要走的路,因为意图是明确的。

关于f# - 我什么时候应该使用 Async.AwaitIAsyncResult 而不是 Async.AwaitTask 来等待任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com