Explain thread/event duality and why evented systems matter

Hey, there's research!
It may also be useful to note that, where the language used is sufficiently flexible, it is possible to implement this, more-or-less entirely in the language proper.

Example of this include OCaml's core-async and LWT; Scala's futures (especially with the async macros).

The .NET runtime takes a hybrid approach: these constructs are first-class in the language, and their implementations are included in the runtime.