Change Batch(), use TPL, return Task/Task<T>, #100