protected override Task<bool> OnMessageReceived(PersistentResponse response)
{
if (response == null)
{
throw new ArgumentNullException("response");
}
response.Reconnect = HostShutdownToken.IsCancellationRequested;
Task task = TaskAsyncHelper.Empty;
if (response.Aborted)
{
// If this was a clean disconnect then raise the event
task = Abort();
}
if (response.Terminal)
{
// If the response wasn't sent, send it before ending the request
if (!_responseSent)
{
// Ensure delegate continues to use the C# Compiler static delegate caching optimization.
return task.Then((transport, resp) => transport.Send(resp), this, response)
.Then(() =>
{
_transportLifetime.Complete();
return TaskAsyncHelper.False;
});
}
// Ensure delegate continues to use the C# Compiler static delegate caching optimization.
return task.Then(() =>
{
_transportLifetime.Complete();
return TaskAsyncHelper.False;
});
}
// Mark the response as sent
_responseSent = true;
// Send the response and return false
// Ensure delegate continues to use the C# Compiler static delegate caching optimization.
return task.Then((transport, resp) => transport.Send(resp), this, response)
.Then(() => TaskAsyncHelper.False);
}