There are many ways to manage concurrency: with threads, co-routines, continuations, generators, ... and events. A page on Event programming and why it is relevant to Tcl/Tk programming explains some of the background behind Tcl's emphasis of the latter.
Events are a relatively "safe" programming model, particularly when compared to threading [refer here to JO paper].
Notice that C# makes events first-class objects. This is consistent with Anders Hejlsberg's earlier work with Delphi ...
[Also see [L1 ].]