이 작업을 수행하는 방법이 궁금합니다. 나는 오랜 시간이 걸리는 COM 객체를 가지고 있는데, 뭔가 잘못되면 20 분이 지났음을 알았다. 클라이언트 프로그램이 너무 오래 기다리는 것은 용납 될 수없는 일입니다.COM Interop에 시간 초과가 발생했습니다.
따라서 다른 스레드에서 COM 작업을 호출하고 특정 시간 초과 후에 스레드를 죽일 생각입니다.
나는 동기 반사를 통해 invokation을 할 수있는 COM 도우미가 있습니다
ComInvoke.Get<bool>(dcomSrv, "Launched");
이 COM 인스턴스
에서 부울 속성을 얻고 난이 사용하여 작업을 마무리 할 :
var task = Task.Factory.StartNew<bool>(() =>
{
return ComInvoke.Get<bool>(dcomSrv, "Launched");
});
if (task.Wait(5000) == false)
{
task.Dispose();
throw new Exception("Task timeout");
}
문제는 취소 토큰을 사용할 수있는 루프가 없다는 것입니다.
좋은 해결책인가요? 아니면 더 좋은 점이 있습니까?
감사합니다. TPL이 일의 일정 기본적으로 ThreadPool이를 사용하기 때문에
in-process COM 개체 또는 원격 DCOM 개체 ('dcomSrv'라는 이름이 불안한 단서입니까?)입니까? –
DCOM 개체 (에이전트 종류)이거나 로컬 또는 원격 컴퓨터에서 실행될 수 있습니다. – Robert