diff --git a/src/Microsoft.DotNet.Interactive.CSharpProject/Build/FileLock.cs b/src/Microsoft.DotNet.Interactive.CSharpProject/Build/FileLock.cs index e992961ea6..f1d2468f26 100644 --- a/src/Microsoft.DotNet.Interactive.CSharpProject/Build/FileLock.cs +++ b/src/Microsoft.DotNet.Interactive.CSharpProject/Build/FileLock.cs @@ -41,7 +41,6 @@ private static async Task TryCreateAsync(FileInfo lockFile) throw new ArgumentNullException(nameof(lockFile)); } - const int waitAmount = 100; var attemptCount = 1; while (attemptCount <= 100) @@ -54,7 +53,7 @@ private static async Task TryCreateAsync(FileInfo lockFile) { } - await Task.Delay(waitAmount); + await Task.Delay(TimeSpan.FromMilliseconds(100)); attemptCount++; if (attemptCount % 10 == 0) @@ -63,6 +62,6 @@ private static async Task TryCreateAsync(FileInfo lockFile) } } - throw new IOException($"Cannot acquire file lock {lockFile.FullName}"); + throw new IOException($"Cannot acquire file lock {lockFile.FullName} after {attemptCount} attempts."); } } \ No newline at end of file diff --git a/src/Microsoft.DotNet.Interactive.CSharpProject/Build/Package.cs b/src/Microsoft.DotNet.Interactive.CSharpProject/Build/Package.cs index 2cb1bd3f67..fbd20834a9 100644 --- a/src/Microsoft.DotNet.Interactive.CSharpProject/Build/Package.cs +++ b/src/Microsoft.DotNet.Interactive.CSharpProject/Build/Package.cs @@ -14,7 +14,6 @@ using System.Reactive.Disposables; using System.Reactive.Linq; using System.Reactive.Subjects; -using System.Runtime.CompilerServices; using System.Threading; using System.Threading.Tasks; using static Microsoft.DotNet.Interactive.CSharpProject.RoslynWorkspaceUtilities.RoslynWorkspaceUtilities; @@ -263,8 +262,7 @@ private void InitializeBuildChannel() private async Task ProcessBuildRequest() { - await EnsureCreatedAsync(); - await EnsureBuiltAsync(); + await EnsureReadyAsync(); var ws = CreateRoslynWorkspace(); SetCompletionSourceResult(_buildCompletionSource, ws, _buildCompletionSourceLock); } @@ -299,12 +297,18 @@ private CodeAnalysis.Workspace CreateRoslynWorkspace() public async Task EnsureReadyAsync() { + if (_roslynWorkspace is not null) + { + Log.Info("Workspace already loaded for package {name}.", Name); + return; + } + await EnsureCreatedAsync(); await EnsureBuiltAsync(); } - protected async Task EnsureBuiltAsync([CallerMemberName] string caller = null) + protected async Task EnsureBuiltAsync() { using var operation = _log.OnEnterAndConfirmOnExit();