use GCD instead of NSOpperationQueue