public async Task RouteNotification(IRequestDescriptor <TDescriptor> descriptors, Notification notification, CancellationToken token) { using (_activityTracingStrategy?.ApplyInbound(notification) ?? Disposable.Empty) { using var debug = _logger.TimeDebug("Routing Notification {Method}", notification.Method); using var _ = _logger.BeginScope( new[] { new KeyValuePair <string, string?>("Method", notification.Method), new KeyValuePair <string, string?>("Params", notification.Params?.ToString()) } ); object? @params = null; if (!(descriptors.Default?.Params is null)) { if (descriptors.Default.IsDelegatingHandler) { _logger.LogTrace( "Converting params for Notification {Method} to {Type}", notification.Method, descriptors.Default.Params.GetGenericArguments()[0].FullName ); var o = notification.Params?.ToObject(descriptors.Default.Params.GetGenericArguments()[0], _serializer.JsonSerializer); @params = Activator.CreateInstance(descriptors.Default.Params, o); } else { _logger.LogTrace("Converting params for Notification {Method} to {Type}", notification.Method, descriptors.Default.Params.FullName); @params = notification.Params?.ToObject(descriptors.Default.Params, _serializer.JsonSerializer); } } await Task.WhenAll(descriptors.Select(descriptor => InnerRoute(_serviceScopeFactory, descriptor, @params, token))).ConfigureAwait(false); }