SendInBackground should perform the entire call asyncronously

Currently the message is built synchronously on the calling thread.
Generally this represents the majority of the call time as sending the
message is generally trivial despite being blocking I/O.

This PR adds the BuildMessage operation to the background task to minimize
the call time which I would believe to be more correct behaviour for the
call.

I have done limited testing on the impact on this change across various environments so this should be verified prior to merging to check if this change impacts data collection in any way.