public @CheckForNull CauseOfBlockage canTake(Node node, BuildableItem item) {
        return canTake(node,item.task); // backward compatible behaviour
    }
public @ CheckForNull CauseOfBlockage canTake ( Node node , BuildableItem item ) { return canTake ( node , item . task ) ; }
Called when {@link Queue} is deciding where to execute the given task.

<p>
Implementations can return null to indicate that the assignment is fine, or it can return
a non-null instance to block the execution of the task on the given node.

<p>
Queue doesn't remember/cache the response from dispatchers, and instead it'll keep asking.
The upside of this is that it's very easy to block execution for a limited time period (
as you just need to return null when it's ready to execute.) The downside of this is that
the decision needs to be made quickly.

<p>
This method is primarily designed to fine-tune where the execution should take place. If the execution
shouldn't commence anywhere at all, implementation should use {@link #canRun(Queue.Item)} instead so
that Jenkins understands the difference between "this node isn't the right place for this work"
vs "the time isn't right for this work to execute." This affects the provisioning behaviour
with elastic Jenkins deployments.

<p>
Vetos are additive. When multiple {@link QueueTaskDispatcher}s are in the system,
the task won't run on the given node if any one of them returns a non-null value.
(This relationship is also the same with built-in check logic.)

@since 1.413