@Override
 public void cancel() {
   if (!timedOut.get()) {
     cancelled.set(true);
     ReportContext ctx =
         new ReportContext(name, context, Arrays.asList(toDump.getStackTrace()), toDump, delay);
     for (Reporter reporter : reporters) reporter.reportCancellation(ctx);
   }
 }
 @Override
 public void run(Timeout timeout) throws Exception {
   if (timeout.isExpired() && !cancelled.get()) {
     timedOut.set(true);
     ReportContext ctx =
         new ReportContext(name, context, Arrays.asList(toDump.getStackTrace()), toDump, delay);
     for (Reporter reporter : reporters) reporter.reportTimeout(ctx);
   }
 }