This is becoming an ever increasingly common issue with Vulkan Renderer...
Now as a sidenote., you will NOT experience this issue with the OpenGL Renderer because it's Swap Chain works differently.
Vulkan on the other hand requires exclusivity during the Threaded Barrier.
Now something to keep in mind is that OpenGL works the way it does because it was an effort to Standardise the Programming Side through Driver Abstraction.
That is to say that when you called glSwapChain( )... well the Graphics Driver would handle what it needed to for THAT architecture, to accomplish that.
Today things are different... the Architectures themselves have a Standardised Approach., i.e. you handle Swap Chains identically on AMD, NVIDIA, Intel and ImageTech.
As such this allows us to go back to Low-Level (Close-to-Metal) with Vulkan / Metal 2 / DirectX 12; and with little to no driver input execute the same approach regardless of Hardware.
Still, this is partially the issue here.
Remember Drivers would have robust approaches to accomplish various tasks such-as SwapChain... *because* of Edge Cases (such-as what you're running into) and I don't think AppGameKit does.
As noted... a lot of this likely could be resolved by using a Async Hardware Thread; as this would make associated memory immutable during flight, then anything that accesses it would just have to handle the "immutable" error thrown; i.e. wait until it's free.
Stlll., failing this., another approach on a Single Thread is to add layers of checks for Swap Chain invalidation; and lock the memory while in-flight to ensure that the content or size doesn't change while it's being accessed or rather during the process.
I know that it's easy to say "Well it's faster execution without this... and it doesn't seem to cause any issues." because again 99.99% of the time, it will be fine.
The issue are edge cases; that's what we always need to ensure we're programming for, especially when working Close-to-Metal., as Hardware isn't polite about it's interactions the same way Abstracted Layers are, politely waiting for their turn... you tell them to do something, they just DO it.
What you can do is simple... either nothing and accept it as an edge-case that *may* crash the Application from time-to-time or add #Renderer "Basic" to the start and use OpenGL.
Hopefully as this issue occurs more often TGC _might_ actually realise that their current approach is a "Problem" that needs to be fixed., but I wouldn't count on that.
There are various bigger, replicatable issues that have been left unaddressed for months (if not longer); and it feels like they've placed AppGameKit into maintenance mode, doing minor patches mostly to maintain compatibility with current iOS and Android SDKs.
So like DBP post FPS Creator... we essentially have to figure out our own workarounds.