Завершение ManualResetEvent как ожидаемая задача
Я хотел бы дождаться события ручного сброса с тайм-аутом и наблюдением отмены. Я'Мы придумали что-то вроде ниже. Объект события ручного сброса предоставляется API вне моего контроля. Есть ли способ сделать это, не принимая и не блокируя поток из ThreadPool?
static Task TaskFromWaitHandle(WaitHandle mre, int timeout, CancellationToken ct)
{
return Task.Run(() =>
{
bool s = WaitHandle.WaitAny(new WaitHandle[] { mre, ct.WaitHandle }, timeout) == 0;
ct.ThrowIfCancellationRequested();
return s;
}, ct);
}
// ...
if (await TaskFromWaitHandle(manualResetEvent, 1000, cts.Token))
{
// true if event was set
}
else
{
// false if timed out, exception if cancelled
}
[EDITED] Видимо, этоимеет смысл использоватьRegisterWaitForSingleObject
, Я'попробую.