make the message processing truely async (#1596)

This commit is contained in:
Alan Ren
2022-07-21 16:58:03 -07:00
committed by GitHub
parent fc2d1300fd
commit 08c74be51f
2 changed files with 44 additions and 36 deletions

View File

@@ -124,25 +124,28 @@ namespace Microsoft.SqlTools.Hosting.Protocol
requestType.MethodName, requestType.MethodName,
(requestMessage, messageWriter) => (requestMessage, messageWriter) =>
{ {
var requestContext = return Task.Run(async () =>
new RequestContext<TResult>(
requestMessage,
messageWriter);
TParams typedParams = default(TParams);
if (requestMessage.Contents != null)
{ {
try var requestContext =
{ new RequestContext<TResult>(
typedParams = requestMessage.Contents.ToObject<TParams>(); requestMessage,
} messageWriter);
catch (Exception ex)
{
return requestContext.SendError(ex.Message);
}
}
return requestHandler(typedParams, requestContext); TParams typedParams = default(TParams);
if (requestMessage.Contents != null)
{
try
{
typedParams = requestMessage.Contents.ToObject<TParams>();
}
catch (Exception ex)
{
await requestContext.SendError(ex.Message);
}
}
await requestHandler(typedParams, requestContext);
});
}); });
} }
@@ -171,22 +174,25 @@ namespace Microsoft.SqlTools.Hosting.Protocol
eventType.MethodName, eventType.MethodName,
(eventMessage, messageWriter) => (eventMessage, messageWriter) =>
{ {
var eventContext = new EventContext(messageWriter); return Task.Run(async () =>
TParams typedParams = default(TParams);
if (eventMessage.Contents != null)
{ {
try var eventContext = new EventContext(messageWriter);
{
typedParams = eventMessage.Contents.ToObject<TParams>();
}
catch (Exception ex)
{
Logger.Write(TraceEventType.Verbose, ex.ToString());
}
}
return eventHandler(typedParams, eventContext); TParams typedParams = default(TParams);
if (eventMessage.Contents != null)
{
try
{
typedParams = eventMessage.Contents.ToObject<TParams>();
}
catch (Exception ex)
{
Logger.Write(TraceEventType.Verbose, ex.ToString());
}
}
await eventHandler(typedParams, eventContext);
});
}); });
} }
@@ -317,21 +323,23 @@ namespace Microsoft.SqlTools.Hosting.Protocol
// thread is not blocked. // thread is not blocked.
_ = Task.Run(() => _ = Task.Run(() =>
{ {
_ = RunTask(handlerToAwait); _ = RunTask(messageToDispatch, handlerToAwait);
}); });
} }
else else
{ {
await RunTask(handlerToAwait); await RunTask(messageToDispatch, handlerToAwait);
} }
} }
} }
private async Task RunTask(Task task) private async Task RunTask(Message message, Task task)
{ {
try try
{ {
Logger.Write(TraceEventType.Verbose, $"Processing message with id[{message.Id}], of type[{message.MessageType}] and method[{message.Method}]");
await task; await task;
Logger.Write(TraceEventType.Verbose, $"Finished processing message with id[{message.Id}], of type[{message.MessageType}] and method[{message.Method}]");
} }
catch (TaskCanceledException) catch (TaskCanceledException)
{ {

View File

@@ -1211,7 +1211,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent
parameters.OwnerUri, parameters.OwnerUri,
out connInfo); out connInfo);
result.Success = true; result.Success = true;
result.Notebooks = AgentNotebookHelper.GetAgentNotebooks(connInfo).Result; result.Notebooks = await AgentNotebookHelper.GetAgentNotebooks(connInfo);
} }
catch (Exception e) catch (Exception e)
{ {
@@ -1260,7 +1260,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent
ConnectionServiceInstance.TryFindConnection( ConnectionServiceInstance.TryFindConnection(
parameters.OwnerUri, parameters.OwnerUri,
out connInfo); out connInfo);
result.NotebookMaterialized = AgentNotebookHelper.GetMaterializedNotebook(connInfo, parameters.NotebookMaterializedId, parameters.TargetDatabase).Result; result.NotebookMaterialized = await AgentNotebookHelper.GetMaterializedNotebook(connInfo, parameters.NotebookMaterializedId, parameters.TargetDatabase);
result.Success = true; result.Success = true;
} }
catch (Exception e) catch (Exception e)