@@ -13,7 +13,7 @@ namespace Microsoft.PowerShell.EditorServices
13
13
{
14
14
using System . Management . Automation ;
15
15
using System . Management . Automation . Runspaces ;
16
-
16
+ using System . Threading ;
17
17
/// <summary>
18
18
/// Provides a high-level service for performing code completion and
19
19
/// navigation operations on PowerShell scripts.
@@ -31,6 +31,8 @@ public class LanguageService
31
31
private Dictionary < String , List < String > > CmdletToAliasDictionary ;
32
32
private Dictionary < String , String > AliasToCmdletDictionary ;
33
33
34
+ const int DefaultWaitTimeoutMilliseconds = 5000 ;
35
+
34
36
#endregion
35
37
36
38
#region Constructors
@@ -87,7 +89,8 @@ public async Task<CompletionResults> GetCompletionsInFile(
87
89
columnNumber ) ;
88
90
89
91
RunspaceHandle runspaceHandle =
90
- await this . powerShellContext . GetRunspaceHandle ( ) ;
92
+ await this . powerShellContext . GetRunspaceHandle (
93
+ new CancellationTokenSource ( DefaultWaitTimeoutMilliseconds ) . Token ) ;
91
94
92
95
CommandCompletion commandCompletion =
93
96
AstOperations . GetCompletions (
@@ -193,8 +196,10 @@ public async Task<SymbolDetails> FindSymbolDetailsAtLocation(
193
196
194
197
if ( symbolReference != null )
195
198
{
199
+ // Request a runspace handle with a short timeout
196
200
RunspaceHandle runspaceHandle =
197
- await this . powerShellContext . GetRunspaceHandle ( ) ;
201
+ await this . powerShellContext . GetRunspaceHandle (
202
+ new CancellationTokenSource ( DefaultWaitTimeoutMilliseconds ) . Token ) ;
198
203
199
204
symbolReference . FilePath = scriptFile . FilePath ;
200
205
symbolDetails = new SymbolDetails ( symbolReference , runspaceHandle . Runspace ) ;
@@ -431,8 +436,6 @@ public async Task<ParameterSetSignatures> FindParameterSetsInFile(
431
436
}
432
437
}
433
438
434
- //public SymbolDetails GetSymbolDetails()
435
-
436
439
#endregion
437
440
438
441
#region Private Fields
@@ -444,28 +447,37 @@ private async Task GetAliases()
444
447
{
445
448
if ( ! this . areAliasesLoaded )
446
449
{
447
- RunspaceHandle runspaceHandle = await this . powerShellContext . GetRunspaceHandle ( ) ;
450
+ try
451
+ {
452
+ RunspaceHandle runspaceHandle =
453
+ await this . powerShellContext . GetRunspaceHandle (
454
+ new CancellationTokenSource ( DefaultWaitTimeoutMilliseconds ) . Token ) ;
448
455
449
- CommandInvocationIntrinsics invokeCommand = runspaceHandle . Runspace . SessionStateProxy . InvokeCommand ;
450
- IEnumerable < CommandInfo > aliases = invokeCommand . GetCommands ( "*" , CommandTypes . Alias , true ) ;
456
+ CommandInvocationIntrinsics invokeCommand = runspaceHandle . Runspace . SessionStateProxy . InvokeCommand ;
457
+ IEnumerable < CommandInfo > aliases = invokeCommand . GetCommands ( "*" , CommandTypes . Alias , true ) ;
451
458
452
- runspaceHandle . Dispose ( ) ;
459
+ runspaceHandle . Dispose ( ) ;
453
460
454
- foreach ( AliasInfo aliasInfo in aliases )
455
- {
456
- if ( ! CmdletToAliasDictionary . ContainsKey ( aliasInfo . Definition ) )
457
- {
458
- CmdletToAliasDictionary . Add ( aliasInfo . Definition , new List < String > ( ) { aliasInfo . Name } ) ;
459
- }
460
- else
461
+ foreach ( AliasInfo aliasInfo in aliases )
461
462
{
462
- CmdletToAliasDictionary [ aliasInfo . Definition ] . Add ( aliasInfo . Name ) ;
463
+ if ( ! CmdletToAliasDictionary . ContainsKey ( aliasInfo . Definition ) )
464
+ {
465
+ CmdletToAliasDictionary . Add ( aliasInfo . Definition , new List < String > ( ) { aliasInfo . Name } ) ;
466
+ }
467
+ else
468
+ {
469
+ CmdletToAliasDictionary [ aliasInfo . Definition ] . Add ( aliasInfo . Name ) ;
470
+ }
471
+
472
+ AliasToCmdletDictionary . Add ( aliasInfo . Name , aliasInfo . Definition ) ;
463
473
}
464
474
465
- AliasToCmdletDictionary . Add ( aliasInfo . Name , aliasInfo . Definition ) ;
475
+ this . areAliasesLoaded = true ;
476
+ }
477
+ catch ( TaskCanceledException )
478
+ {
479
+ // The wait for a RunspaceHandle has timed out, skip aliases for now
466
480
}
467
-
468
- this . areAliasesLoaded = true ;
469
481
}
470
482
}
471
483
0 commit comments