handling database info and metadata request async (#541)

This commit is contained in:
Leila Lali
2017-11-01 10:58:47 -07:00
committed by Karl Burtram
parent 93ec9864f6
commit 17e7ddd66f
2 changed files with 48 additions and 28 deletions
@@ -12,6 +12,7 @@ using System.Threading.Tasks;
using System.Xml; using System.Xml;
using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Smo;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using Microsoft.SqlTools.ServiceLayer.Utility;
namespace Microsoft.SqlTools.ServiceLayer.Admin namespace Microsoft.SqlTools.ServiceLayer.Admin
{ {
@@ -144,20 +145,30 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin
{ {
try try
{ {
ConnectionInfo connInfo; Func<Task> requestHandler = async () =>
AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
DatabaseInfo info = null;
if (connInfo != null)
{ {
info = GetDatabaseInfo(connInfo); ConnectionInfo connInfo;
} AdminService.ConnectionServiceInstance.TryFindConnection(
databaseParams.OwnerUri,
out connInfo);
DatabaseInfo info = null;
await requestContext.SendResult(new GetDatabaseInfoResponse(){ if (connInfo != null)
DatabaseInfo = info {
info = GetDatabaseInfo(connInfo);
}
await requestContext.SendResult(new GetDatabaseInfoResponse()
{
DatabaseInfo = info
});
};
Task task = Task.Run(async () => await requestHandler()).ContinueWithOnFaulted(async t =>
{
await requestContext.SendError(t.Exception.ToString());
}); });
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -11,6 +11,7 @@ using Microsoft.SqlTools.Hosting.Protocol;
using Microsoft.SqlTools.ServiceLayer.Connection; using Microsoft.SqlTools.ServiceLayer.Connection;
using Microsoft.SqlTools.ServiceLayer.Hosting; using Microsoft.SqlTools.ServiceLayer.Hosting;
using Microsoft.SqlTools.ServiceLayer.Metadata.Contracts; using Microsoft.SqlTools.ServiceLayer.Metadata.Contracts;
using Microsoft.SqlTools.ServiceLayer.Utility;
namespace Microsoft.SqlTools.ServiceLayer.Metadata namespace Microsoft.SqlTools.ServiceLayer.Metadata
{ {
@@ -66,23 +67,31 @@ namespace Microsoft.SqlTools.ServiceLayer.Metadata
{ {
try try
{ {
ConnectionInfo connInfo; Func<Task> requestHandler = async () =>
MetadataService.ConnectionServiceInstance.TryFindConnection(
metadataParams.OwnerUri,
out connInfo);
var metadata = new List<ObjectMetadata>();
if (connInfo != null)
{ {
using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connInfo, "Metadata")) ConnectionInfo connInfo;
MetadataService.ConnectionServiceInstance.TryFindConnection(
metadataParams.OwnerUri,
out connInfo);
var metadata = new List<ObjectMetadata>();
if (connInfo != null)
{ {
ReadMetadata(sqlConn, metadata); using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connInfo, "Metadata"))
{
ReadMetadata(sqlConn, metadata);
}
} }
}
await requestContext.SendResult(new MetadataQueryResult await requestContext.SendResult(new MetadataQueryResult
{
Metadata = metadata.ToArray()
});
};
Task task = Task.Run(async () => await requestHandler()).ContinueWithOnFaulted(async t =>
{ {
Metadata = metadata.ToArray() await requestContext.SendError(t.Exception.ToString());
}); });
} }
catch (Exception ex) catch (Exception ex)