Skip to content

Commit 88d900e

Browse files
Fixes #52 adds WaitForExit method
1 parent 3d1e56d commit 88d900e

File tree

5 files changed

+19
-8
lines changed

5 files changed

+19
-8
lines changed

sample/SampleServer/Program.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ static async Task MainAsync(string[] args)
2626
server.AddHandler(new TextDocumentHandler(server));
2727

2828
await server.Initialize();
29-
await server.WasShutDown;
29+
await server.WaitForExit;
3030
}
3131
}
3232
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
namespace OmniSharp.Extensions.LanguageServer.Server.Abstractions
1+
using System.Threading.Tasks;
2+
3+
namespace OmniSharp.Extensions.LanguageServer.Server.Abstractions
24
{
35
public interface IAwaitableTermination
46
{
5-
System.Threading.Tasks.Task WasShutDown { get; }
7+
Task WasShutDown { get; }
8+
Task WaitForExit { get; }
69
}
7-
}
10+
}

src/Server/Handlers/ExitHandler.cs

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Threading.Tasks;
22
using OmniSharp.Extensions.LanguageServer.Protocol;
3+
using OmniSharp.Extensions.LanguageServer.Server.Abstractions;
34

45
namespace OmniSharp.Extensions.LanguageServer.Server.Handlers
56
{
@@ -12,9 +13,15 @@ public ExitHandler(ShutdownHandler shutdownHandler)
1213
_shutdownHandler = shutdownHandler;
1314
}
1415

16+
private readonly TaskCompletionSource<int> _exitedSource = new TaskCompletionSource<int>(TaskContinuationOptions.LongRunning);
17+
public Task WaitForExit => _exitedSource.Task;
18+
19+
1520
public Task Handle()
1621
{
17-
Exit?.Invoke(_shutdownHandler.ShutdownRequested ? 0 : 1);
22+
var result = _shutdownHandler.ShutdownRequested ? 0 : 1;
23+
Exit?.Invoke(result);
24+
_exitedSource.SetResult(result);
1825
return Task.CompletedTask;
1926
}
2027

src/Server/Handlers/ShutdownHandler.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
namespace OmniSharp.Extensions.LanguageServer.Server.Handlers
77
{
8-
public class ShutdownHandler : IShutdownHandler, IAwaitableTermination
8+
public class ShutdownHandler : IShutdownHandler
99
{
1010
public event ShutdownEventHandler Shutdown;
1111

1212
public bool ShutdownRequested { get; private set; }
1313

1414
private readonly TaskCompletionSource<bool> _shutdownSource = new TaskCompletionSource<bool>(TaskContinuationOptions.LongRunning);
15-
Task IAwaitableTermination.WasShutDown => _shutdownSource.Task;
15+
public Task WasShutDown => _shutdownSource.Task;
1616
public Task Handle(object request, CancellationToken token)
1717
{
1818
ShutdownRequested = true;

src/Server/LanguageServer.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,8 @@ public TaskCompletionSource<JToken> GetRequest(long id)
329329
return _responseRouter.GetRequest(id);
330330
}
331331

332-
public Task WasShutDown => ((IAwaitableTermination)_shutdownHandler).WasShutDown;
332+
public Task WasShutDown => _shutdownHandler.WasShutDown;
333+
public Task WaitForExit => _exitHandler.WaitForExit;
333334

334335
public void Dispose()
335336
{

0 commit comments

Comments
 (0)