public void discardTaskProducing(
     final ValueSpecification valueSpecification, final ResolveTask task) {
   do {
     final MapEx<ResolveTask, ResolvedValueProducer> tasks =
         getBuilder().getTasks(valueSpecification);
     if (tasks != null) {
       final ResolvedValueProducer producer;
       synchronized (tasks) {
         if (tasks.containsKey(null)) {
           continue;
         }
         producer = (ResolvedValueProducer) tasks.remove(task);
         if (producer == null) {
           // Wasn't in the set
           return;
         }
       }
       producer.release(this);
     }
     return;
   } while (true);
 }