diff --git a/core/includes/common.inc b/core/includes/common.inc
index 323a666b89..98da691d73 100644
--- a/core/includes/common.inc
+++ b/core/includes/common.inc
@@ -1100,7 +1100,7 @@ function drupal_flush_all_caches() {
   \Drupal::service('kernel')->invalidateContainer();
 
   // Wipe the Twig PHP Storage cache.
-  PhpStorageFactory::get('twig')->deleteAll();
+  \Drupal::service('twig')->invalidate();
 
   // Rebuild module and theme data.
   $module_data = system_rebuild_module_data();
diff --git a/core/lib/Drupal/Core/Template/TwigEnvironment.php b/core/lib/Drupal/Core/Template/TwigEnvironment.php
index 21755a5057..e203054bdc 100644
--- a/core/lib/Drupal/Core/Template/TwigEnvironment.php
+++ b/core/lib/Drupal/Core/Template/TwigEnvironment.php
@@ -3,6 +3,7 @@
 namespace Drupal\Core\Template;
 
 use Drupal\Core\Cache\CacheBackendInterface;
+use Drupal\Core\PhpStorage\PhpStorageFactory;
 use Drupal\Core\Render\Markup;
 use Drupal\Core\State\StateInterface;
 
@@ -17,6 +18,18 @@
 class TwigEnvironment extends \Twig_Environment {
 
   /**
+   * Key name of the Twig cache prefix metadata key-value pair in State.
+   */
+  const CACHE_PREFIX_METADATA_KEY = 'twig_extension_hash_prefix';
+
+  /**
+   * The state service.
+   *
+   * @var \Drupal\Core\State\StateInterface
+   */
+  protected $state;
+
+  /**
    * Static cache of template classes.
    *
    * @var array
@@ -43,6 +56,8 @@ class TwigEnvironment extends \Twig_Environment {
    *   The options for the Twig environment.
    */
   public function __construct($root, CacheBackendInterface $cache, $twig_extension_hash, StateInterface $state, \Twig_LoaderInterface $loader = NULL, $options = []) {
+    $this->state = $state;
+
     // Ensure that twig.engine is loaded, given that it is needed to render a
     // template because functions like TwigExtension::escapeFilter() are called.
     require_once $root . '/core/themes/engines/twig/twig.engine';
@@ -63,7 +78,7 @@ public function __construct($root, CacheBackendInterface $cache, $twig_extension
     $this->addExtension($sandbox);
 
     if ($options['cache'] === TRUE) {
-      $current = $state->get('twig_extension_hash_prefix', ['twig_extension_hash' => '']);
+      $current = $state->get(static::CACHE_PREFIX_METADATA_KEY, ['twig_extension_hash' => '']);
       if ($current['twig_extension_hash'] !== $twig_extension_hash || empty($current['twig_cache_prefix'])) {
         $current = [
           'twig_extension_hash' => $twig_extension_hash,
@@ -71,7 +86,7 @@ public function __construct($root, CacheBackendInterface $cache, $twig_extension
           'twig_cache_prefix' => uniqid(),
 
         ];
-        $state->set('twig_extension_hash_prefix', $current);
+        $state->set(static::CACHE_PREFIX_METADATA_KEY, $current);
       }
       $this->twigCachePrefix = $current['twig_cache_prefix'];
 
@@ -83,6 +98,16 @@ public function __construct($root, CacheBackendInterface $cache, $twig_extension
   }
 
   /**
+   * Invalidates all compiled Twig templates.
+   *
+   * @see \drupal_flush_all_caches
+   */
+  public function invalidate() {
+    PhpStorageFactory::get('twig')->deleteAll();
+    $this->state->delete(static::CACHE_PREFIX_METADATA_KEY);
+  }
+
+  /**
    * Get the cache prefixed used by \Drupal\Core\Template\TwigPhpStorageCache
    *
    * @return string
