diff --git a/pkg/analysis_server/analysis_options.yaml b/pkg/analysis_server/analysis_options.yaml
index 9e70161..37bbd55 100644
--- a/pkg/analysis_server/analysis_options.yaml
+++ b/pkg/analysis_server/analysis_options.yaml
@@ -24,5 +24,6 @@
 linter:
   rules:
     - depend_on_referenced_packages
+    - unawaited_futures
     - unnecessary_parenthesis
     - use_super_parameters
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_reanalyze.dart b/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_reanalyze.dart
index b3355c2d..5282454 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_reanalyze.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/custom/handler_reanalyze.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
+
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analysis_server/src/lsp/constants.dart';
 import 'package:analysis_server/src/lsp/handlers/handlers.dart';
@@ -18,7 +20,9 @@
   @override
   Future<ErrorOr<void>> handle(
       void params, MessageInfo message, CancellationToken token) async {
-    server.reanalyze();
+    // This command just starts a refresh, it does not wait for it to
+    // complete before responding to the client.
+    unawaited(server.reanalyze());
     return success(null);
   }
 }
diff --git a/pkg/analysis_server/lib/src/lsp/handlers/handler_exit.dart b/pkg/analysis_server/lib/src/lsp/handlers/handler_exit.dart
index b8b2dbf..5487d58 100644
--- a/pkg/analysis_server/lib/src/lsp/handlers/handler_exit.dart
+++ b/pkg/analysis_server/lib/src/lsp/handlers/handler_exit.dart
@@ -2,6 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
 import 'dart:io';
 
 import 'package:analysis_server/lsp_protocol/protocol.dart';
@@ -30,9 +31,10 @@
     server.willExit = true;
 
     await server.shutdown();
-    Future(() {
-      exit(clientDidCallShutdown ? 0 : 1);
-    });
+    // Use Future to schedule the exit after we have responded to this request
+    // (so the client gets the response). Do not await it as it will prevent the
+    // response from completing.
+    unawaited(Future(() => exit(clientDidCallShutdown ? 0 : 1)));
     return success(null);
   }
 }
diff --git a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
index fd36e21..442bfe4 100644
--- a/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
+++ b/pkg/analysis_server/lib/src/lsp/lsp_analysis_server.dart
@@ -272,7 +272,9 @@
 
     // Client config can affect capabilities, so this should only be done after
     // we have the initial/updated config.
-    capabilitiesComputer.performDynamicRegistration();
+    // Don't await this because it involves sending requests to the client (for
+    // config) that should not stop/delay initialization.
+    unawaited(capabilitiesComputer.performDynamicRegistration());
   }
 
   /// Return a [LineInfo] for the file with the given [path].
diff --git a/pkg/analysis_server/test/lsp/closing_labels_test.dart b/pkg/analysis_server/test/lsp/closing_labels_test.dart
index 211d57d..2518e37 100644
--- a/pkg/analysis_server/test/lsp/closing_labels_test.dart
+++ b/pkg/analysis_server/test/lsp/closing_labels_test.dart
@@ -30,11 +30,11 @@
     await initialize(initializationOptions: {'closingLabels': true});
 
     final labelsUpdateBeforeChange = waitForClosingLabels(mainFileUri);
-    openFile(mainFileUri, initialContent);
+    await openFile(mainFileUri, initialContent);
     final labelsBeforeChange = await labelsUpdateBeforeChange;
 
     final labelsUpdateAfterChange = waitForClosingLabels(mainFileUri);
-    replaceFile(1, mainFileUri, updatedContent);
+    await replaceFile(1, mainFileUri, updatedContent);
     final labelsAfterChange = await labelsUpdateAfterChange;
 
     expect(labelsBeforeChange, isEmpty);
@@ -70,7 +70,7 @@
     await initialize(initializationOptions: {'closingLabels': true});
 
     final closingLabelsUpdate = waitForClosingLabels(mainFileUri);
-    openFile(mainFileUri, content);
+    await openFile(mainFileUri, content);
     final labels = await closingLabelsUpdate;
 
     expect(labels, hasLength(2));
diff --git a/pkg/analysis_server/test/lsp/configuration_test.dart b/pkg/analysis_server/test/lsp/configuration_test.dart
index c4d5b12..c736a40 100644
--- a/pkg/analysis_server/test/lsp/configuration_test.dart
+++ b/pkg/analysis_server/test/lsp/configuration_test.dart
@@ -92,7 +92,7 @@
         .listen((_) => didGetConfigRequest = true);
 
     await initialize();
-    pumpEventQueue();
+    await pumpEventQueue();
 
     expect(didGetConfigRequest, isFalse);
   }
@@ -105,6 +105,6 @@
     await initialize(
         workspaceCapabilities:
             withConfigurationSupport(emptyWorkspaceClientCapabilities));
-    pumpEventQueue();
+    await pumpEventQueue();
   }
 }
diff --git a/pkg/analysis_server/test/lsp/diagnostic_test.dart b/pkg/analysis_server/test/lsp/diagnostic_test.dart
index 994943f..98330d6 100644
--- a/pkg/analysis_server/test/lsp/diagnostic_test.dart
+++ b/pkg/analysis_server/test/lsp/diagnostic_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'dart:async';
+
 import 'package:analysis_server/lsp_protocol/protocol.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as plugin;
 import 'package:analyzer_plugin/protocol/protocol_generated.dart' as plugin;
@@ -270,11 +272,15 @@
     newFile(dotFolderFilePath, 'String a = 1;');
 
     List<Diagnostic>? diagnostics;
-    waitForDiagnostics(dotFolderFileUri).then((d) => diagnostics = d);
+    // Record if diagnostics are recieved, but since we don't expect them
+    // don't await them.
+    unawaited(
+        waitForDiagnostics(dotFolderFileUri).then((d) => diagnostics = d));
 
     // Send a request for a hover.
     await initialize();
     await getHover(dotFolderFileUri, Position(line: 0, character: 0));
+    await pumpEventQueue(times: 5000);
 
     // Ensure that as part of responding to getHover, diagnostics were not
     // transmitted.
diff --git a/pkg/analysis_server/test/lsp/flutter_outline_test.dart b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
index c400feb..3c5fa75 100644
--- a/pkg/analysis_server/test/lsp/flutter_outline_test.dart
+++ b/pkg/analysis_server/test/lsp/flutter_outline_test.dart
@@ -37,11 +37,11 @@
     await initialize(initializationOptions: {'flutterOutline': true});
 
     final outlineUpdateBeforeChange = waitForFlutterOutline(mainFileUri);
-    openFile(mainFileUri, initialContent);
+    await openFile(mainFileUri, initialContent);
     final outlineBeforeChange = await outlineUpdateBeforeChange;
 
     final outlineUpdateAfterChange = waitForFlutterOutline(mainFileUri);
-    replaceFile(1, mainFileUri, updatedContent);
+    await replaceFile(1, mainFileUri, updatedContent);
     final outlineAfterChange = await outlineUpdateAfterChange;
 
     expect(outlineBeforeChange, isNotNull);
@@ -76,7 +76,7 @@
     await initialize(initializationOptions: {'flutterOutline': true});
 
     final outlineNotification = waitForFlutterOutline(mainFileUri);
-    openFile(mainFileUri, content);
+    await openFile(mainFileUri, content);
     final outline = await outlineNotification;
 
     expect(outline, isNotNull);
diff --git a/pkg/analysis_server/test/lsp/initialization_test.dart b/pkg/analysis_server/test/lsp/initialization_test.dart
index 4f6bf6e..d304655 100644
--- a/pkg/analysis_server/test/lsp/initialization_test.dart
+++ b/pkg/analysis_server/test/lsp/initialization_test.dart
@@ -470,14 +470,12 @@
     // The server will send an unregister request followed by another register
     // request to change document filter on folding. We need to respond to the
     // unregister request as the server awaits that.
-    requestsFromServer
+    // This is set up as a future callback and should not be awaited here.
+    unawaited(requestsFromServer
         .firstWhere((r) => r.method == Method.client_unregisterCapability)
         .then((request) {
       respondTo(request, null);
-      return UnregistrationParams.fromJson(
-              request.params as Map<String, Object?>)
-          .unregisterations;
-    });
+    }));
 
     final request = await expectRequest(Method.client_registerCapability, () {
       final plugin = configureTestPlugin();
diff --git a/pkg/analysis_server/test/lsp/outline_test.dart b/pkg/analysis_server/test/lsp/outline_test.dart
index 7c630a2..e369585 100644
--- a/pkg/analysis_server/test/lsp/outline_test.dart
+++ b/pkg/analysis_server/test/lsp/outline_test.dart
@@ -22,11 +22,11 @@
     await initialize(initializationOptions: {'outline': true});
 
     final outlineUpdateBeforeChange = waitForOutline(mainFileUri);
-    openFile(mainFileUri, initialContent);
+    await openFile(mainFileUri, initialContent);
     final outlineBeforeChange = await outlineUpdateBeforeChange;
 
     final outlineUpdateAfterChange = waitForOutline(mainFileUri);
-    replaceFile(1, mainFileUri, updatedContent);
+    await replaceFile(1, mainFileUri, updatedContent);
     final outlineAfterChange = await outlineUpdateAfterChange;
 
     expect(outlineBeforeChange, isNotNull);
@@ -46,7 +46,7 @@
     await initialize(initializationOptions: {'outline': true});
 
     final outlineUpdate = waitForOutline(mainFileUri);
-    openFile(mainFileUri, initialContent);
+    await openFile(mainFileUri, initialContent);
     final outline = await outlineUpdate;
 
     expect(outline, isNotNull);
@@ -72,7 +72,7 @@
     await initialize(initializationOptions: {'outline': true});
 
     final outlineNotification = waitForOutline(mainFileUri);
-    openFile(mainFileUri, content);
+    await openFile(mainFileUri, content);
     final outline = await outlineNotification;
 
     expect(outline, isNotNull);
