I've noticed this issue a few times, and I just wanted to get other people's thoughts/experience/workarounds if they have any.
Basically, when running zpool export it seems that ZFS causes various things to become locked until the export completes, even if they have nothing to do with the pool being exported. The worst offender in my experience is Safari which for some bizarre reason can become unusable while the export is taking place, despite my user and cache folders all being on the internal system volume (not ZFS), so there's no good reason why an export should cause it to lock up until the export finishes.
Ordinarily this wouldn't be a big issue, as exporting a locally attached pool is quick, and not something you need to do often. However, there are cases where an export may take a lot longer, especially if there are a lot of dirty writes in the buffer (new data that hasn't been fully written to all disks yet) or if the devices are especially slow.
In my case one of my pools is actually a file on a network share – all kinds of horrible I know, but my NAS doesn't have native ZFS support so it's the least worst option I've found. But because of this, and because it's being used for backups (lots of data being written before export), the exports often take several minutes, so whenever this extra backup runs, during the export stage I usually find things locking up temporarily.
I find it a bit strange that these lock-ups occur, and I'm unsure if it's a newer issue or not as I don't remember it being a problem under v2.1.0 (I'm currently on v2.2.3)? It doesn't really make any sense that exporting my remote pool should interfere with other pools (causing zfs snapshot and some write operations to hang until the export finishes) when they're not the ones being exported, or why it should affect Safari which is running entirely on APFS. I have noticed that diskarbitrationd seems to be stuck around 100% CPU usage while the export is happening, though I'm not sure why that might be (as it shouldn't be doing anything at that stage).
I'm curious if anyone has any ideas for a workaround (other than getting a better NAS, that's on my list already but it's a bit out of my budget right now). Is there any way to detect outstanding writes for a pool and wait for them to finish (or go below a certain amount) before I trigger my zpool export?