improving with latest c# feature (async await and tpl)