[.net] timeout для произвольной операции
Task task = new Task => Func;
task.Start;
task.Wait(TimeSpan.FromSeconds(5;
if (!task.IsCompleted)
{
throw new TimeoutException;
}
Только
а) task.Wait может бросить AggregateException
б) при истечении таймаута поток с таском не убивается и не прекращает выполняться, чтобы это делалось надо думать что-то с CancellationToken'ами
в) точно хочешь связываться с многопоточностью и асинхронщиной?:)
в) точно хочешь связываться с многопоточностью и асинхронщиной?:)Думала об этом - совсем не хочу Проще бы что-нить.
Я не эксперт в .net, предположила, что есть готовые решения на тему сабжа. Столкнулась с проблемой, программа зависает на инициализации класса из сторонней dll. От этой dll'ки отказаться не могу, в реализацию init'а timeout не встроен, вот и думаю, как малой кровью решить эту проблему.
Если эта дллина не работает, то зачем тебе она? :-)
Я не знаю, если у тебя правда такая мерзостная дллка которую кровь из носа нужно заюзать, почитай про AppDomain, а то и вовсе создавай настоящий отдельный процесс который будет её врапить...
Запусти код, который использует эту глючную dll в отдельном _процессе_. И вызывай его через какой-нибудь rpc. В любом rpc должны быть таймауты.
var initThread = new Thread( => Func; );
initThread.Start;
if (!initThread.Join(TimeSpan.FromSeconds(5
initThread.Abort;
Ну и плюсуюсь к в случае нетривиальной DLL-ки.
Но так как чо виснет и почему и при каких условиях неясно, трудно подобрать лучший вариант. С процессами тоже придется открыть для себя прелести межпроцессной коммуникации
так нам как раз и нужен непредсказуемый аборт
Нам - это кому?:-)
Оставить комментарий
Jekich
Существует ли возможность в .net установить timeout на выполнение произвольной операции?Хочется чего-то а ля