I worked for 5 years on VMS for a real-time satellite image processing HW/SW system for NASA. VMS was wonderful. At another company, I then worked on a Unix system for a few years, then 2 years on a port of our software to Unix. (The port was smooth and quick, thanks to VAX C and its relatively complete library; most of the 2 years was spent adding new capabilities for a particular customer.) The rest of my career has mostly been under Unix.
Microsoft hired the main architect of VMS, Dave Cutler, away from DEC to design Windows NT. (VMS++ = WNT!) I haven't worked on any in-depth Windows programming projects. I did read an article some years ago about Cutler, VMS, and WNT. The author pointed out an insightful distinction between VMS and Unix with regard to I/O operations: VMS tells you when an operation completes, whereas Unix tells you when you can begin an operation. As a result, I think, asynchronous I/O under VMS was there and available from the git-go, but always seemed like some odd thing grafted onto Unix, making it more painful than it should have been. I have never used it, but I believe WNT's overlapped I/O was patterned after the VMS model?