The worker goes on working, and the UI processes the message when it gets to it. Asynchronous update is a common programming paradigm, and a clear candidate for PostMessage. In general, PostMessage is safer when you want to send a message to another process or thread, because SendMessage can block. More on this in a moment. Another time to use PostMessage is when you want to finish processing the current message before processing the new one.
Post works better when simulating input.
Sometimes you have to use PostMessage to get around a quirk or bug to avoid infinite recursion. The result is infinite regress until your stack blows up. This is one of those examples that's easier to understand in practice than on paper. But PostMessage adds the message to the message queue, which is associated with a thread or process, not a window. In theory, PostMessage doesn't need a window.