Updated a asynchronize to throw an exception when an error result is returned. Now uses two channels, one for success and one for failure, per callback and closes them appropriately once a value (success or failure) has been retrieved