i agree with taazz: confusing.
what async do?
insert something like a application.processmessages after each instruction at compiler time?
async should execute, asynchronously, a single statement or a begin/end block (in a separate thread)
ProcessMessages forces main thread messages to be executed
honestly I think that confusion there is and can be dangerous, in relation to code as:
for a:=1 to 100000 do
async DoSomething();
this code is expected to create 100000 threads: here the damage is greater than the benefit
where the rigth code to write is:
async for a:=1 to 100000 do
DoSomething();
but I think it's still an interesting, easy and powerful approach