C# - Asynchronous Data Access base class to retrieve data from the database without blocking the caller