Although with the advant of async/await it appears as if the old APM model might have become obsolete, all async/await does is to transform the source code into the equivalent APM call and hence the underlying infrastructure will be the same.
In most cases, TPL and async/await will be the mechanism for .Net developers. They simplify a lot of work. But if one needs precise control over the thread of execution/etc, APM will still be the better choice.
- EasyAsync – a C# async callback library - http://easyasync.codeplex.com/
- A C# Promise library - https://bitbucket.org/mattkotsenas/c-promises