I'm not clear if you absolutely have to use TPL but CML is likely just a better model for tackling concurrency and Hopac is orders of magnitude more efficient than F#'s async.
https://github.com/Hopac/Hopac
https://github.com/Hopac/Hopac/blob/master/Docs/Programming....
http://t0yv0.blogspot.com/2014/03/concurrent-ml-and-hopac.ht...
https://neoeinstein.github.io/blog/2016/04-08-hopac-getting-...
John Reppy's CML seems like a much better toolbox which gets composability without pretension. Vesa Karvonen (whom I understand has worked on the MLTon compiler) has offered an excellent delivery in Hopac for C# and F# complete with a slew of combinators: https://github.com/Hopac/Hopac
I'm not aware of anyone offering an alternative superior to an informal CSP yet which seems to be the reason why Go and Clojure have picked it as well for their concurrency model.
See David Nolen's excellent blog posts on the matter:
http://swannodette.github.io/2013/07/12/communicating-sequen... http://swannodette.github.io/2013/08/17/comparative
Another option with deeper language integration is mbrace: http://mbrace.io/
Vesa Karvonen ported CML to F# as Hopac, which has very good performance: https://github.com/Hopac/Hopac
Finally, there're Orleans and Naiad from MSFT:
I've also linked to js-csp, a JS library obviously not implemented using macros.
I can also find other examples of implementation as libraries, but I have no experience with them:
- Scala: https://github.com/rssh/scala-gopher