So it means that total waiting time will be more than a specified `limit`.. Not exactly what a user will expect. If I annotate my class with:

```
@ScheduleWithFixedDelay(delay = 1, unit = TimeUnit.NANOSECONDS, limit = Tv.TEN, limitUnit = TimeUnit.SECONDS)
```

I expect it to close in 10 seconds maximum. In your implementation closing may take up to 9 seconds over the limit (19s in total). 

How about using these parameters instead:

```
@ScheduleWithFixedDelay(
  delay = 1, unit = TimeUnit.NANOSECONDS, 
  await = Tv.TEN, awaitUnit = TimeUnit.SECONDS,
  shutdownAttempts = 5
)
```

Which means, that we're going to wait for 10 seconds for correct termination of threads, and then we'll make 5 attempts to interrupt them in rude way, one attempt per second. And we document this in javadoc.

And I would suggest to break this loop into two. The first one will wait for graceful termination, the second one will hammer threads with interruption requests.