【发布时间】:2017-09-27 10:34:29
【问题描述】:
我们的程序正在执行来自 DLL 的未知方法。有时这些方法不会处理超时并且永远不会返回值。
因此,我们的 Methodinfo.invoke(...) 将永远停留在这一行。
有什么体面的方法可以中止我们的方法吗? 我知道我可能应该异步运行这个方法,这没问题。
这里有一些可视化的小例子:
public string startTheDLLMethod(int timeout)
{
var methodinfo = "...";
return methodGettingStuck(methodinfo); //todo, abort this after timeout
}
public string methodGettingStuck(methodinfo)
{
var1 = "";
var2 = "";
methodinfo.Invoke(var1, var2); //Stuck.
}
【问题讨论】:
-
ThreadAbortException?请提供minimal reproducible example。 -
阅读更多关于
CancellationTokenSource的信息。 -
您是否声称 CancellationTokenSource 能够在该方法卡在 1 行时停止该方法
-
DLL 分配的东西难吗?当 DLL 分配 FileHandles 或类似的东西时,我不建议使用 Thread.Abort 和 ThreadAbortException。
-
我不知道未来不同公司的 DLL 会做什么,所以也许
标签: c# multithreading reflection abort