The example you gave does not make much sense as you are returning the signal after being emitted so it probably block the execution of the function that’s awaiting until the signal is emitted again.
Again, please explain precisely what you want to achieve with a clear example because the solution you found does not make any sense. Why would you await until the end of the frame to continue executing whatever code you had after awaiting the operation() method?
And, as I said before, get_tree().create_timer(0.1).timeout does not return a signal. SceneTree.create_timer() returns an object which has the timeout signal.