private void SafeHandleEventAndSetResult(string signaledEventKey)
{
lock (locker)
{
if (handlerCalled)
return;
handlerCalled = true;
foreach (var eventKey in eventKeys)
{
signalBus.RemoveHandler(eventKey, Handler);
}
if (canceled)
{
Tcs.SetCanceled();
}
else
{
Tcs.SetResult(new SignalResult { TimedOut = timedOut, EventKey = signaledEventKey });
}
Timer timer;
if (_timers.TryRemove(timerKey, out timer))
{
timer.Dispose();
}
}
}