gpt4 book ai didi

asynchronous - 没有调用 async { try...finally...} 的 finally 的可能原因是什么? Rx 涉及

转载 作者:行者123 更新时间:2023-12-04 04:17:27 25 4
gpt4 key购买 nike

我有这样的东西:

let a =
async {
try
do! Async.AwaitTask someTask
finally
// clean up
}
Async.Start (a, cancellationTokenSource.Token)

a 中等待的任务完成时,finally block 执行并完成清理,但是当异步 a 被取消时因为 cancellationTokenSource 调用了 Cancel,所以没有进行清理。事实上,我怀疑 a 一直在运行。

我真的没有头绪,所以这里有一个初步的猜测:不,我真的猜不到。

编辑

看来问题出在a正在等待的任务上。如果 someTask 是这样的:

Async.Ignore (Async.AwaitIAsyncResult <| Task.Delay(5000))

那么,没问题:)但!如果任务是这样的:

vm.Finished.Select(ignore).FirstAsync().ToTask()

(vm 是一个 View 模型。Finished 一个事件。基本上,我希望 a 由于取消或因为 Finished 发生在 vm 中。)

然后 a 拒绝被取消或最终被跳过我不知道是哪个。

最佳答案

需要将CancellationToken传递给ToTask(),否则无法取消。

使用this ToTask overload .

关于asynchronous - 没有调用 async { try...finally...} 的 finally 的可能原因是什么? Rx 涉及,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30418097/

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