Query timeouts when duration is under a second
I have realized that what ever duration is, it is not the time that the timedout query ran for.  I ran waitfor delay '00:00:30' in a query window set to timeout in 10 seconds.  The results should have been 10 seconds for all of the time outs.  But I got these values for my 6 tests: 70707, 311, 269, 264, 3442, 272.  My guess is that duration is the amount if time it took to handle the Attention event (i.e. Stop the query).

Just to be sure that the duration wouldn't work correctly with an actual running query, I ran a long running one, again set to timeout in 10 seconds.  The durations where: 64246, 58002, 52828, 68061, 48153, 49084.  They took longer, but none of those times is close to 10 seconds.  Again, confirms that duration is not what it seems to be.  

The documentation says duration is in Microseconds (not milliseconds).  That also could work if it is the time to handle the Attention event, but it would never match up to the time it took for the timed out query to run.

I ran the long running query without a time out and had to stop it after 120 seconds.  It took a lot longer to stop, and the duration for the Attention event was 6400055.  6.4 seconds is about how long it took to stop.  Again confirming that duration is the amount of time it takes to handle the "Attention" event.