use state setting instead of throwing exception as its async operation