From 17e7ddd66f94f429c11fe8c4a40d123d93e919a8 Mon Sep 17 00:00:00 2001 From: Leila Lali Date: Wed, 1 Nov 2017 17:58:47 +0000 Subject: [PATCH] handling database info and metadata request async (#541) --- .../Admin/AdminService.cs | 35 ++++++++++------ .../Metadata/MetadataService.cs | 41 +++++++++++-------- 2 files changed, 48 insertions(+), 28 deletions(-) diff --git a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs index fdb61f28..b361656e 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Admin/AdminService.cs @@ -12,6 +12,7 @@ using System.Threading.Tasks; using System.Xml; using Microsoft.SqlServer.Management.Smo; using System.Collections.Concurrent; +using Microsoft.SqlTools.ServiceLayer.Utility; namespace Microsoft.SqlTools.ServiceLayer.Admin { @@ -143,21 +144,31 @@ namespace Microsoft.SqlTools.ServiceLayer.Admin RequestContext requestContext) { try - { - ConnectionInfo connInfo; - AdminService.ConnectionServiceInstance.TryFindConnection( - databaseParams.OwnerUri, - out connInfo); - DatabaseInfo info = null; - - if (connInfo != null) + { + Func requestHandler = async () => { - info = GetDatabaseInfo(connInfo); - } + ConnectionInfo connInfo; + AdminService.ConnectionServiceInstance.TryFindConnection( + databaseParams.OwnerUri, + out connInfo); + DatabaseInfo info = null; - await requestContext.SendResult(new GetDatabaseInfoResponse(){ - DatabaseInfo = info + if (connInfo != null) + { + 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) { diff --git a/src/Microsoft.SqlTools.ServiceLayer/Metadata/MetadataService.cs b/src/Microsoft.SqlTools.ServiceLayer/Metadata/MetadataService.cs index 16400d7a..7e4a76e4 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Metadata/MetadataService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Metadata/MetadataService.cs @@ -11,6 +11,7 @@ using Microsoft.SqlTools.Hosting.Protocol; using Microsoft.SqlTools.ServiceLayer.Connection; using Microsoft.SqlTools.ServiceLayer.Hosting; using Microsoft.SqlTools.ServiceLayer.Metadata.Contracts; +using Microsoft.SqlTools.ServiceLayer.Utility; namespace Microsoft.SqlTools.ServiceLayer.Metadata { @@ -66,23 +67,31 @@ namespace Microsoft.SqlTools.ServiceLayer.Metadata { try { - ConnectionInfo connInfo; - MetadataService.ConnectionServiceInstance.TryFindConnection( - metadataParams.OwnerUri, - out connInfo); - - var metadata = new List(); - if (connInfo != null) - { - using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connInfo, "Metadata")) - { - ReadMetadata(sqlConn, metadata); - } - } - - await requestContext.SendResult(new MetadataQueryResult + Func requestHandler = async () => { - Metadata = metadata.ToArray() + ConnectionInfo connInfo; + MetadataService.ConnectionServiceInstance.TryFindConnection( + metadataParams.OwnerUri, + out connInfo); + + var metadata = new List(); + if (connInfo != null) + { + using (SqlConnection sqlConn = ConnectionService.OpenSqlConnection(connInfo, "Metadata")) + { + ReadMetadata(sqlConn, metadata); + } + } + + await requestContext.SendResult(new MetadataQueryResult + { + Metadata = metadata.ToArray() + }); + }; + + Task task = Task.Run(async () => await requestHandler()).ContinueWithOnFaulted(async t => + { + await requestContext.SendError(t.Exception.ToString()); }); } catch (Exception ex)