Fix unreliability in async_read.exe test
It failed on Jenkins today (https://jenkins.mono-project.com/job/test-mono-mainline/label=debian-amd64/3611/parsed_console/log_content.html#WARNING1)
and I could repro it after running the test in a loop.
While looking at the test, the "sum -= buf [0]" seemed suspicious to me. The final callback invocation after the last byte was read results
in buf [0] being 0 most of the time (because no bytes were read). However, due to the async nature of the test that final callback might happen
before another callback and buf then has a value, resulting in a wrong checksum if that value is substracted.
The fix is to remove the substraction. I have no idea why it was done in the first place, but it's been there since the test was added in 2003...
While at it, I've added another check for the number of bytes read and used proper Interlocked.* operations to ensure atomicity.