// ready to signal match
d.pollers.Remove(poller)
// TODO(pri): maybe we can allow tasks to have costs other than 1
d.rateLimitManager.consumeTokens(now, task, 1)
task.recycleToken = d.recycleToken
res := &matchResult{task: task, poller: poller}
task.wake(d.logger, res)
// for poll forwarder: skip waking poller, forwarder will call finishMatchAfterPollForward
if !task.isPollForwarder() {
poller.wake(d.logger, res)
}