Я работаю с LogParser 2.2 в C # через COM-взаимодействие и хотел бы иметь возможность дать длительным запросам тайм-аут.
, например
var ctx = new COMIISW3CInputContextClassClass();
var log = new LogQueryClassClass();
var rs = log.Execute(qry, ctx);
Можно ли прервать вызов log.Execute
, если это займет слишком много времени?
Я попытался Thread.Abort()
, но, похоже, ThreadAbortException ждет, пока вызов Execute не завершится нормально.
Код, используемый для проверки Thread.Abort()
:
var ctx = new COMIISW3CInputContextClassClass();
var log = new LogQueryClassClass();
ILogRecordset rs = null;
var t = new Thread(() =>
{
rs = log.Execute(qry, ctx);
});
t.SetApartmentState(ApartmentState.STA);
t.Start();
t.Join(100);
t.Abort();
// this tests if the file lock is still held by log parser
Assert.Throws<IOException>(() =>
File.OpenWrite(path));
t.join(10000);
// file is no longer locked
using (File.OpenWrite(path))
Assert.IsTrue(true);