sync, async, block and non-block.