You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Perf: .Result blocks MailboxProcessor thread in FSharpProjectOptionsManager #20125
FSharpProjectOptionsManager.fs's hasDependentVersionChanged used blocking .Result calls on GetDependentVersionAsync(ct).Result when comparing non-F# project references. Since this function is invoked from isProjectInvalidated, which is called from tryComputeOptions / tryComputeOptionsBySingleScriptOrFile inside the FSharpProjectOptionsReactor's MailboxProcessor loop, these synchronous waits could block the single-threaded reactor loop during project invalidation, causing UI/background responsiveness issues.
Repro / Evidence
Identified via CPU profiling of background F# editor activity in Visual Studio; located via code search for .Result usages in vsintegration/src/FSharp.Editor.
Fix
Convert hasDependentVersionChanged and isProjectInvalidated to cancellableTask workflows using let! instead of .Result, so the invalidation path is fully async and no longer blocks the mailbox loop.
changed the title [-]Perf: .Result blocks MailboxProcessor thread in FSharpProjectOptionsManager[/-][+]Perf: `.Result` blocks `MailboxProcessor` thread in `FSharpProjectOptionsManager`[/+]on Aug 3, 2026
Activity
Perf: async isProjectInvalidated + debounce script updateProjectOptions
[-]Perf: .Result blocks MailboxProcessor thread in FSharpProjectOptionsManager[/-][+]Perf: `.Result` blocks `MailboxProcessor` thread in `FSharpProjectOptionsManager`[/+]Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Perf: async isProjectInvalidated + debounce script updateProjectOptions
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates
Invalidate project options asynchronously and debounce script updates