【发布时间】:2014-02-27 01:18:50
【问题描述】:
我有一个外部 dll,其中包含一些我需要调用的方法。另外,我希望能够为执行这些方法配置超时,以便在执行时间>配置超时时中止它们。 我在不同的任务上调用这些方法,如下所示:
Parallel.ForEach(....
{
Func<object> asyncFucntion = () => DynamicCall(method, paramList);
IAsyncResult ar = asyncFucntion.BeginInvoke(null, null);
if (ar.AsyncWaitHandle.WaitOne(timeout, true))
{
return asyncFucntion.EndInvoke(ar);
}
else
{
//HERE I NEED to stop DynamicCall. Timeout was EXCEEDED
}
});
现在,我可以获取 DynamicCall 线程 id 并中止它。还有其他方法吗?更轻松的方式?我无法使用取消令牌,因为我无法修改外部 Dll
谢谢, 亚历克斯
【问题讨论】:
-
如果您需要突然停止操作 abort 是一种方法(除非您没有其他方法,否则不要这样做),否则请查看合作取消
标签: c# .net multithreading timeout abort