Open nkolev92 opened 4 years ago
The following code fails to use JoinableTaskFactory, and causes a deadlock when invoked on the UI thread:
https://github.com/Microsoft/msbuild/blob/a6932230ec64fe853dddb42b2e5c385fad4e3785/src/NuGetSdkResolver/NuGetSdkResolver.cs#L118-L126
mscorlib.dll!System.Threading.Monitor.Wait(object obj, int millisecondsTimeout, bool exitContext) Line 203 C# mscorlib.dll!System.Threading.Monitor.Wait(object obj, int millisecondsTimeout) Line 213 C# mscorlib.dll!System.Threading.ManualResetEventSlim.Wait(int millisecondsTimeout, System.Threading.CancellationToken cancellationToken) Line 688 C# mscorlib.dll!System.Threading.Tasks.Task.SpinThenBlockingWait(int millisecondsTimeout, System.Threading.CancellationToken cancellationToken) Line 3320 C# mscorlib.dll!System.Threading.Tasks.Task.InternalWait(int millisecondsTimeout, System.Threading.CancellationToken cancellationToken) Line 3259 C# mscorlib.dll!System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(System.Threading.Tasks.Task task) Line 148 C# NuGet.MSBuildSdkResolver.dll!NuGet.MSBuildSdkResolver.NuGetSdkResolver.NuGetAbstraction.GetSdkResult(Microsoft.Build.Framework.SdkReference sdk, object nuGetVersion, Microsoft.Build.Framework.SdkResolverContext context, Microsoft.Build.Framework.SdkResultFactory factory) Unknown NuGet.MSBuildSdkResolver.dll!NuGet.MSBuildSdkResolver.NuGetSdkResolver.ResolveSdk(Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.Framework.SdkResolverContext context, Microsoft.Build.Framework.SdkResultFactory factory) Unknown NuGet.MSBuildSdkResolver.dll!NuGet.MSBuildSdkResolver.NuGetSdkResolverBase.Resolve(Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.Framework.SdkResolverContext context, Microsoft.Build.Framework.SdkResultFactory factory) Unknown Microsoft.Build.dll!Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.GetSdkResult(int submissionId, Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.BackEnd.Logging.LoggingContext loggingContext, Microsoft.Build.Construction.ElementLocation sdkReferenceLocation, string solutionPath, string projectPath) Unknown Microsoft.Build.dll!Microsoft.Build.BackEnd.SdkResolution.SdkResolverService.ResolveSdk(int submissionId, Microsoft.Build.Framework.SdkReference sdk, Microsoft.Build.BackEnd.Logging.LoggingContext loggingContext, Microsoft.Build.Construction.ElementLocation sdkReferenceLocation, string solutionPath, string projectPath) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.ExpandAndLoadImportsFromUnescapedImportExpressionConditioned(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement, out System.Collections.Generic.List<Microsoft.Build.Construction.ProjectRootElement> projects, bool throwOnFileNotExistsError) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.ExpandAndLoadImports(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.EvaluateImportElement(string directoryOfImportingFile, Microsoft.Build.Construction.ProjectImportElement importElement) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.PerformDepthFirstPass(Microsoft.Build.Construction.ProjectRootElement currentProjectOrImport) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.Evaluate(Microsoft.Build.BackEnd.Logging.ILoggingService loggingService, Microsoft.Build.Framework.BuildEventContext buildEventContext) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Evaluator<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition>.Evaluate(Microsoft.Build.Evaluation.IEvaluatorData<Microsoft.Build.Evaluation.ProjectProperty, Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectMetadata, Microsoft.Build.Evaluation.ProjectItemDefinition> data, Microsoft.Build.Construction.ProjectRootElement root, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings, int maxNodeCount, Microsoft.Build.Collections.PropertyDictionary<Microsoft.Build.Execution.ProjectPropertyInstance> environmentProperties, Microsoft.Build.BackEnd.Logging.ILoggingService loggingService, Microsoft.Build.Evaluation.IItemFactory<Microsoft.Build.Evaluation.ProjectItem, Microsoft.Build.Evaluation.ProjectItem> itemFactory, Microsoft.Build.Evaluation.IToolsetProvider toolsetProvider, Microsoft.Build.Evaluation.ProjectRootElementCache projectRootElementCache, Microsoft.Build.Framework.BuildEventContext buildEventContext, Microsoft.Build.Execution.ProjectInstance projectInstanceIfAnyForDebuggerOnly, Microsoft.Build.BackEnd.SdkResolution.ISdkResolverService sdkResolverService, int submissionId) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Reevaluate(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.ReevaluateIfNecessary(Microsoft.Build.BackEnd.Logging.ILoggingService loggingServiceForEvaluation, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Initialize(System.Collections.Generic.IDictionary<string, string> globalProperties, string toolsVersion, string subToolsetVersion, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown Microsoft.Build.dll!Microsoft.Build.Evaluation.Project.Project(Microsoft.Build.Construction.ProjectRootElement xml, System.Collections.Generic.IDictionary<string, string> globalProperties, string toolsVersion, string subToolsetVersion, Microsoft.Build.Evaluation.ProjectCollection projectCollection, Microsoft.Build.Evaluation.ProjectLoadSettings loadSettings) Unknown Microsoft.VisualStudio.Workspace.Extensions.Implementation.dll!Microsoft.VisualStudio.Workspace.Extensions.MSBuild.MSBuildProjectHelper.GetProjectConfigurations(Microsoft.Build.Construction.ProjectRootElement projectXml, Microsoft.Build.Evaluation.ProjectCollection projectCollection, System.Collections.Generic.IDictionary<string, string> globalProperties) Unknown Microsoft.VisualStudio.Workspace.Extensions.Implementation.dll!Microsoft.VisualStudio.Workspace.Extensions.MSBuild.MSBuildProjectHelper.CreateFileContextForProjectAsync(Microsoft.VisualStudio.Workspace.IWorkspace workspace, string projectFilePathRelative, System.Collections.Generic.IReadOnlyDictionary<string, Microsoft.VisualStudio.Workspace.Extensions.ManagedCommandLineInfo> intellisenseDataInfo, System.Threading.CancellationToken cancellationToken) Unknown Microsoft.VisualStudio.Workspace.Extensions.Implementation.dll!Microsoft.VisualStudio.Workspace.Extensions.MSBuild.MSBuildManagedProjectFileContextProvider.FileContextProvider.GetContextsForFileAsync(string filePath, System.Threading.CancellationToken cancellationToken) Unknown mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine) Line 1090 C# mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954 C# mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902 C# mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Line 1070 C# mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.InvokeAction(object state) Line 730 C# mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback callback, object state, ref System.Threading.Tasks.Task currentTask) Line 759 C# mscorlib.dll!System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.Run(System.Threading.Tasks.Task task, bool canInlineContinuationTask) Line 433 C# mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations() Line 3642 C# mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree() Line 2363 C# mscorlib.dll!System.Threading.Tasks.Task<System.__Canon>.TrySetResult(System.__Canon result) Line 490 C# mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Collections.Generic.IReadOnlyDictionary<string, Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>>.SetResult(System.Collections.Generic.IReadOnlyDictionary<string, Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData> result) Line 603 C# Microsoft.VisualStudio.Workspace.dll!Microsoft.VisualStudio.Workspace.Indexing.IIndexWorkspaceServiceHelper.GetValuesByContextAsync<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>(Microsoft.VisualStudio.Workspace.Indexing.IIndexWorkspaceService indexWorkspaceService, string filePath, System.Guid type, bool refreshOption, System.Threading.CancellationToken cancellationToken, string target) Unknown mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine) Line 1090 C# mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954 C# mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902 C# mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Line 1070 C# mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.InvokeAction(object state) Line 730 C# mscorlib.dll!System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback callback, object state, ref System.Threading.Tasks.Task currentTask) Line 759 C# mscorlib.dll!System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.Run(System.Threading.Tasks.Task task, bool canInlineContinuationTask) Line 433 C# mscorlib.dll!System.Threading.Tasks.Task.FinishContinuations() Line 3642 C# mscorlib.dll!System.Threading.Tasks.Task.FinishStageThree() Line 2363 C# mscorlib.dll!System.Threading.Tasks.Task<System.__Canon>.TrySetResult(System.__Canon result) Line 490 C# mscorlib.dll!System.Runtime.CompilerServices.AsyncTaskMethodBuilder<System.Collections.Generic.IEnumerable<Microsoft.VisualStudio.Workspace.Indexing.FileDataResult<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>>>.SetResult(System.Collections.Generic.IEnumerable<Microsoft.VisualStudio.Workspace.Indexing.FileDataResult<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>> result) Line 603 C# Microsoft.VisualStudio.Workspace.Implementation.dll!Microsoft.VisualStudio.Workspace.Indexing.IndexWorkspaceService.GetFileDataValuesAsync<Microsoft.VisualStudio.Workspace.Extensions.MSBuild.ManagedIntellisenseData>(string filePath, System.Guid type, bool refreshOption, System.Threading.CancellationToken cancellationToken, string target, string context) Unknown mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(object stateMachine) Line 1090 C# mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954 C# mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902 C# mscorlib.dll!System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run() Line 1070 C# mscorlib.dll!System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation..cctor.AnonymousMethod__8_0(object state) Line 388 C# Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.SingleExecuteProtector.TryExecute() Unknown Microsoft.VisualStudio.Threading.dll!Microsoft.VisualStudio.Threading.JoinableTaskFactory.SingleExecuteProtector..cctor.AnonymousMethod__20_0(object state) Unknown WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Unknown WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Unknown WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeImpl() Unknown WindowsBase.dll!System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(object state) Unknown WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.CallbackWrapper(object obj) Unknown mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 954 C# mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state, bool preserveSyncCtx) Line 902 C# mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Line 891 C# WindowsBase.dll!MS.Internal.CulturePreservingExecutionContext.Run(MS.Internal.CulturePreservingExecutionContext executionContext, System.Threading.ContextCallback callback, object state) Unknown WindowsBase.dll!System.Windows.Threading.DispatcherOperation.Invoke() Unknown WindowsBase.dll!System.Windows.Threading.Dispatcher.ProcessQueue() Unknown WindowsBase.dll!System.Windows.Threading.Dispatcher.WndProcHook(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) Unknown WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd, int msg, System.IntPtr wParam, System.IntPtr lParam, ref bool handled) Unknown WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) Unknown WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback, object args, int numArgs) Unknown WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source, System.Delegate callback, object args, int numArgs, System.Delegate catchHandler) Unknown WindowsBase.dll!System.Windows.Threading.Dispatcher.LegacyInvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, int numArgs) Unknown
cc @sharwell @jeffkl
dup 1093593
The scope of this task expanded
Removing myself from the assignees...the MSBuild/SDK team is managing it.
The following code fails to use JoinableTaskFactory, and causes a deadlock when invoked on the UI thread:
https://github.com/Microsoft/msbuild/blob/a6932230ec64fe853dddb42b2e5c385fad4e3785/src/NuGetSdkResolver/NuGetSdkResolver.cs#L118-L126
cc @sharwell @jeffkl
dup 1093593