【发布时间】:2011-03-16 23:49:09
【问题描述】:
我想知道如何做到这一点。我有一个 COM 对象,它的操作有时需要很长时间,另外我注意到,如果出现问题,它有自己的超时 20 分钟。客户端程序等待这么久是不可接受的。
因此,我正在考虑在另一个线程上调用 COM 操作,并在特定超时后终止该线程。
我有 COM 助手通过反射进行调用,这是同步的:
ComInvoke.Get<bool>(dcomSrv, "Launched");
这从 COM 实例中获取一个布尔属性
我想用 Task 包装它:
var task = Task.Factory.StartNew<bool>(() =>
{
return ComInvoke.Get<bool>(dcomSrv, "Launched");
});
if (task.Wait(5000) == false)
{
task.Dispose();
throw new Exception("Task timeout");
}
问题是在任务中没有可以使用取消令牌的循环。
您认为这是一个好的解决方案还是您有更好的解决方案?
谢谢!
【问题讨论】:
-
它是进程内 COM 对象,还是远程 DCOM 对象(名称
dcomSrv是一个令人不安的线索)? -
它是一个 DCOM 对象(一种代理),可以在本地或远程机器上执行
标签: c# .net asynchronous com-interop task-parallel-library