Thanks Matt and Maksim. I now feel more confident that FileStream is largely an anachronism at this point :)
For more context: it was while I was looking at one of these out-of-net consumers of FileStream (IndexedDB blob reading) that I became curious about FileStream. It seems that our code can become a good deal simpler if we just stop using FileStream, but I was worried that FileStream was somehow useful in a way that wasn't immediately apparent to me. It sounds like the async i/o (on Windows) is only useful in the context of having a shared file thread that we don't want to block (a somewhat archaic concern, in most cases, probably), and in the case of a dedicated ThreadPool TaskRunner it's not buying us anything. In fact, FileStream has the annoying property of needing to be run on a TYPE_IO thread.
Looking at the other consumers of FileStream, in or out of net::, was not in my immediate scope, but probably something to add to the storage team backlog. Skimming through them, most use a dedicated taskrunner, although a few use a taskrunner shared by a few objects, which would mean async IO might have some effect for them. But those probably could be updated to dedicated TaskRunners, which would also be an improvement for non-win if there is indeed contention for that thread.