diff --git a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs index e04495632eb28b..cab50621bd0ce1 100644 --- a/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs +++ b/src/libraries/System.Private.CoreLib/src/System/Runtime/CompilerServices/AsyncInstrumentation.cs @@ -107,6 +107,15 @@ private static Flags InitializeFlags() { if (IsUninitialized(s_activeFlags)) { + // The debugger may have set Task.s_asyncDebuggingEnabled directly via ICorDebug + // before any ETW session is established. In that case, s_asyncDebuggerActiveFlags + // will still be Disabled because OnEventCommand was never called. Honor the + // debugger's request by enabling default flags when s_asyncDebuggingEnabled is set. + if (s_asyncDebuggerActiveFlags == Flags.Disabled && Task.s_asyncDebuggingEnabled) + { + s_asyncDebuggerActiveFlags = DefaultFlags | Flags.AsyncDebugger; + } + s_activeFlags = s_asyncProfilerActiveFlags | s_asyncDebuggerActiveFlags; }