I just realized if I add a sleep in the same function it is working as expected.

void Finalize( B list )
{
	if ( !futureCancelSell[0] || futureCancelSell[1].ready() ) 
	{
		futureCancelSell[0] = true;
		futureCancelSell[1] = vibe.core.concurrency.async( &CheckPreviousSells, list);
	}
    sleep(300msecs);
}


But that destroys the main point. Why I have to sleep in the same stack frame?