gpt4 book ai didi

C# 移动操作挂起而不是立即抛出异常

转载 作者:可可西里 更新时间:2023-11-01 09:36:54 26 4
gpt4 key购买 nike

有谁知道为什么有时 C# 中的 Directory.Move() 操作会挂起/等待而不是立即抛出异常?

例如:
如果我在 try block 中使用 Directory.Move() 方法,然后在文件资源管理器中导航到该文件夹​​,Windows 会创建一些锁定它的句柄。

然后,我希望立即执行 catch block ,但它就像应用程序在抛出异常之前只是挂起 10-15 秒。

有趣的是,如果我在这 10-15 秒内离开文件资源管理器中的文件夹,那么应用程序实际上会完成 Move() 操作。

这就像:Windows 不是立即抛出异常,而是挂起 10-15 秒,看看负责句柄(锁)的人是否自行关闭了这些句柄。

有没有办法让应用程序立即抛出异常?

最佳答案

您的问题“有人知道为什么有时 C# 中的移动操作会挂起/等待而不是立即抛出异常吗?”的答案。可能是 .net 框架从其对 NTFS 锁的请求中发出了一个挂起状态,并最终放弃了。

System.IO.Directory.Move 直接映射到 Kernel32 函数;我想最终这会发现自己调用 LockFileEx ( https://msdn.microsoft.com/en-us/library/windows/desktop/aa365203(v=vs.85).aspx ),它允许调用者指定如果无法获得锁是立即失败,还是等待指定的时间。我猜 Kernel32 使用了允许设置超时的变体。 .net 框架似乎对其使用的超时没有任何影响。

关于C# 移动操作挂起而不是立即抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37209896/

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