I use the same approach as Koderz for multi-threading using the RMC.
I have two queues, one for generation tasks, one for rendering. The game thread adds a new task to the generation queue, which spawns a thread and calculated all the geometry, and then when it’s finished adds a task to the render queue. I check the render queue each tick and if there’s a task in there, it calls UpdateMeshSection.