A frame can (and should) be resumed a number of times corresponding to the number of times is suspends. Resume and suspend must be “in sync”.
I think copying frames is UB but I’m not 100% sure about the specific rules about it. Now that we’re adding async/await back into the compiler I will probably have a chance to dust off my knowledge of it.
Lastly, be aware that suspend and resume are low level APIs, so if you’re not making an event loop (or something similar), you should most probably only need async and await.