gpt4 book ai didi

c# - 异步世界中的故障安全处置

转载 作者:可可西里 更新时间:2023-11-01 08:29:52 26 4
gpt4 key购买 nike

在同步世界中,C# 使一次性管理所有事物变得非常容易:

using(IDisposable someDisposable=bla.bla())
{
//do our bidding
}
//don't worry too much about it

但是,当我们使用异步时,我们不再享受 using block 带来的便利。我遇到的最好的策略之一是 CCR iterator这允许我们使用异步代码“就好像它是同步的”。这意味着我们可以将 using block 保留在迭代器处理程序中,而不会陷入何时处理和捕获所有需要处理的情况的复杂决定中。

但是,在许多情况下,调用 CCR 似乎有点矫枉过正,老实说,虽然我对 CCR 很满意,但对于外行来说,它看起来像是双重荷兰语。

所以我的问题是:当一次性对象必须持续超出直接范围时,还有哪些其他策略可用于管理一个人的 IDisposable?

最佳答案

一种方法是让所有无法与处置方法共存的方法在运行时锁定,并在完成时检查队列中是否有需要处置的对象。然后处置方法可以将自己添加到队列中,使用 TryEnter 尝试获取锁,处置对象并在成功时将其从队列中删除,否则让当前的锁持有者处理处置。

关于c# - 异步世界中的故障安全处置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5036310/

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