Мне было интересно, как этого добиться.У меня есть 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");
}
Дело в том, что в задаче нет цикла, в котором я мог бы использовать токен отмены.
Как вы думаете, это хорошее решение или у вас есть что-то лучше?
Спасибо!