add timeout support
add cancel support
0.1.0