Multi-threading question

I am developing a card game with a complex AI. The card game “logic” runs on a background thread whilst the rendering is done on the UI thread. As the game progresses it invokes callbacks and waits for user input - all of that is supposed to alter the state of the game objects, but I think this should really be happening on the UI thread to prevent race conditions with the Update/Draw loop.

I tried to use SynchronizationContext but then I have seen that the default implementation of Send simply invokes the delegate on the current thread (ie. not fit for purpose). My testers report various nasty race conditions happening. Unfortunately I am not able to reproduce them myself on my phone. What is the best practice?

Many thanks.