处理第三方库的不可靠异步操作

问题描述 投票:0回答:1

假设有一个不受我们控制的第三方库。

假设该库有许多具有任一签名的方法:

Task SomeMethod()

Task SomeOtherMethod(CancellationToken ct)

现在说这个库不能正常运行。

假设由于任何故障,这些呼叫可能永远不会从呼叫中返回。

如何包装这些来处理这种情况?

我相信有人建议的一件事是在新线程中调用它们,但我不完全确定如何最好地做到这一点。 同时有人认为这还不够,因为虽然线程可以中止,但调用本身可能会保持活动状态。 老实说我很困惑。

我很高兴看到这些调用的一些示例,这样我可能会开始了解可以做什么。

c# async-await
1个回答
0
投票

如果无法信任某个库能够正常运行,那么也无法信任使用该库的应用程序能够正常运行。因此,理想情况下,您宁愿避开这个库,而是寻找一个值得信赖的库。

您可以做的最安全的事情是在单独的进程上调用此库,并且:

  1. 如果库响应时间过长,请终止该进程。
  2. 库响应后,要么终止进程,要么保持其活动状态以供下一次调用。

这样,该库的任何破坏性影响都不会影响应用程序主进程的状态。根据库的功能,它仍然可能会损坏主进程外部的状态,例如文件或数据库。理论上,恶意库甚至可以反击并杀死您自己的进程。

实现此方案所需的 API 是

Process
类、
Kill
方法以及某种形式的 进程间通信,以便您可以传递调用的参数并接收结果。

© www.soinside.com 2019 - 2024. All rights reserved.