Fixed issue where connecting could take very long and cancellation would not work (#78)

* Fixed issue where connecting could take very long and cancellation would not work

* Addressing feedback

* Remove warning suppression
This commit is contained in:
Mitchell Sternke
2016-10-06 10:15:59 -07:00
committed by GitHub
parent c6a2568075
commit 926cfbf3bc

View File

@@ -264,10 +264,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
};
// invoke callback notifications
foreach (var activity in this.onConnectionActivities)
{
await activity(connectionInfo);
}
invokeOnConnectionActivities(connectionInfo);
// try to get information about the connected SQL Server instance
try
@@ -461,24 +458,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
try
{
// create a task to connect asyncronously so that other requests are not blocked in the meantime
Task.Run(async () =>
{
try
{
// open connection based on request details
ConnectionCompleteParams result = await ConnectionService.Instance.Connect(connectParams);
await ServiceHost.SendEvent(ConnectionCompleteNotification.Type, result);
}
catch (Exception ex)
{
ConnectionCompleteParams result = new ConnectionCompleteParams()
{
Messages = ex.ToString()
};
await ServiceHost.SendEvent(ConnectionCompleteNotification.Type, result);
}
});
RunConnectRequestHandlerTask(connectParams, requestContext);
await requestContext.SendResult(true);
}
catch
@@ -487,6 +467,28 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
}
}
private void RunConnectRequestHandlerTask(ConnectParams connectParams, RequestContext<bool> requestContext)
{
// create a task to connect asynchronously so that other requests are not blocked in the meantime
Task.Run(async () =>
{
try
{
// open connection based on request details
ConnectionCompleteParams result = await ConnectionService.Instance.Connect(connectParams);
await ServiceHost.SendEvent(ConnectionCompleteNotification.Type, result);
}
catch (Exception ex)
{
ConnectionCompleteParams result = new ConnectionCompleteParams()
{
Messages = ex.ToString()
};
await ServiceHost.SendEvent(ConnectionCompleteNotification.Type, result);
}
});
}
/// <summary>
/// Handle cancel connect requests
/// </summary>
@@ -723,5 +725,14 @@ namespace Microsoft.SqlTools.ServiceLayer.Connection
}
}
}
private void invokeOnConnectionActivities(ConnectionInfo connectionInfo)
{
foreach (var activity in this.onConnectionActivities)
{
// not awaiting here to allow handlers to run in the background
activity(connectionInfo);
}
}
}
}