I don't think what you ask for is possible, however, there are a few things you can do that look darned similar:
1) Use an NSPopover instead of a menu. That is asynchronous and intended to be used in many contexts where a popup menu could be used. If you need to support OS versions that don't have popovers, you can also always create an NSWindow with buttons in it.
2) If you are trying to run timers, or other operations that are scheduled on the run loop (e.g. downloads), you can schedule these in NSEventTrackingRunLoopMode. By default, they're only scheduled for NSDefaultRunLoopMode (which makes sense, because you don't want to cancel the user's menu selection when a timer triggers that shows an alert).
To be honest, what you're trying to do seems kinda pointless, confusing, backwards and an abuse of menus. But that's probably just because I don't know what you're trying to achieve. What's your high-level task? Why does what need to happen on the main thread while a menu is up. Can't you have that other thing (in your example the NSLog()) happening on a second thread and leave the menu on the main thread?