I think async/await is semantically similar to the promises pattern [1] but different to the Go concurrent models using channels. What the compiler does with await/async is quite interesting [2]. Essentially it takes your await/async code and turns the related code into a state machine which keeps track of how control should be switched between the callee and the await keyword (and uses Task for the async bit).
[1] http://blog.parse.com/2013/01/29/whats-so-great-about-javasc...
[2] http://www.codeproject.com/Articles/535635/Async-Await-and-t...