gpt4 book ai didi

c# - 在第三方库代码中中止执行的最安全方法

转载 作者:太空宇宙 更新时间:2023-11-03 17:01:02 25 4
gpt4 key购买 nike

这是我的解决方案中的一个代码的简化版本,它使用了一个非常有问题的第三方库代码:

public GlitchyThirdPartyComponent GetThirdPartyComponent(Stream stream)
{
return new GlitchyThirdPartyComponent(stream);
}

对于某些流,GlitchyThirdPartyComponent 的构造函数完全崩溃并开始消耗大量的 CPU 能力和内存并且永远不会退出直到 OutOfMemoryException 发生(闻起来像某处的无限循环).

我正在尝试找出调用 GetThirdPartyComponent 的最安全方法,如果它仍在运行,则在特定超时后中止其执行。

我已经研究了几个可能的解决方案,但似乎没有合适的解决方案。有几个原因:

  1. 我无法访问第三方库源代码。所有程序集都经过混淆处理,因此也无需反汇编
  2. GlitchyThirdPartyComponent 不可序列化,因此没有跨应用域或跨进程的解决方案
  3. GlitchyThirdPartyComponent 最有可能使用 COM(从其界面的外观来看),因此 Thread.Abort 是一个非常不可靠的选项
  4. 虽然可以使用其他第三方库或向我当前的库供应商寻求错误修复,但这些解决方案需要时间,我的问题应该尽快得到解决

那么,遇到这种情况我该怎么办呢? Thread.Abort 真的是最好的解决方案吗?

最佳答案

您可以将对 GlitchyThirdPartyComponent 的调用包装在 Task 中。然后有一个超时。像这样

int timeout = 1000;
var task = Task.Run(() => new GlitchyThirdPartyComponent(stream))
if (await Task.WhenAny(task, Task.Delay(timeout)) == task) {
// task completed within timeout
} else {
// timeout logic
}

关于c# - 在第三方库代码中中止执行的最安全方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786396/

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