Must use Func that return Task otherwise we can't use in web pages unless they use async controllers