AsyncReceive to prevent signal loss

Hi,
I am reading the sliding window example of Temporal golang samples. I get it that a reportCompletionChannel.ReceiveAsync is called in a for loop until no more message is available. Then the workflow will proceed to continue-as-new.
My question is what happen if new signals arrived during the gap between the for loop is exit and the continue-as-new is executed?
Will signals get buffered? If signal is buffered, what is the point of calling ReceiveSync?

My question is what happen if new signals arrived during the gap between the for loop is exit and the continue-as-new is executed?

The workflow code is rolled back to the location of the last goroutine blockage and reexecuted, so the new signal will be processed.

thanks, if there is a roll back mechanism like this, then why do we still need to call ReceiveSync?

Because it rolls back a single workflow task and blocking a workflow creates another one.