It doesn't do anything by itself: the returned View object is rendered by the ViewRendererListener
into an HttpFoundation Response.
This action can be selectively replaced by a custom action by means of block_view
configuration. Custom actions can add parameters to the view and customize the Response the View will be
converted to. They may also bypass the ViewRenderer by returning an HttpFoundation Response.
Cache is in both cases handled by the BlockCacheResponseListener.