include the #ifdef for NET_45
dropped a bunch of async/await usages

There's also some differences here between using IReadOnlyCollection and
IReadOnlyList. We should decide on one and be consistent