Browse Source

Use optimized version of ValueTask WhenAll

pull/531/head
Sebastian 6 years ago
parent
commit
94dc292f5a
  1. 33
      backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleEventFormatter.cs
  2. 1
      backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj
  3. 1
      backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs

33
backend/src/Squidex.Domain.Apps.Core.Operations/HandleRules/RuleEventFormatter.cs

@ -17,6 +17,7 @@ using Squidex.Domain.Apps.Core.Rules.EnrichedEvents;
using Squidex.Domain.Apps.Core.Scripting; using Squidex.Domain.Apps.Core.Scripting;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.Json; using Squidex.Infrastructure.Json;
using ValueTaskSupplement;
namespace Squidex.Domain.Apps.Core.HandleRules namespace Squidex.Domain.Apps.Core.HandleRules
{ {
@ -33,21 +34,22 @@ namespace Squidex.Domain.Apps.Core.HandleRules
{ {
public bool IsText; public bool IsText;
public int Length; public int TextLength;
public int Offset; public int TextOffset;
public string Fallback; public string VarFallback;
public string Transform; public string VarTransform;
public ValueTask<string?> Replacement; public ValueTask<string?> Var;
public static TextPart Text(int offset, int length) public static TextPart Text(int offset, int length)
{ {
var result = default(TextPart); var result = default(TextPart);
result.Offset = offset;
result.Length = length; result.TextOffset = offset;
result.TextLength = length;
result.IsText = true; result.IsText = true;
return result; return result;
@ -56,9 +58,10 @@ namespace Squidex.Domain.Apps.Core.HandleRules
public static TextPart Variable(ValueTask<string?> replacement, string fallback, string transform) public static TextPart Variable(ValueTask<string?> replacement, string fallback, string transform)
{ {
var result = default(TextPart); var result = default(TextPart);
result.Replacement = replacement;
result.Fallback = fallback; result.Var = replacement;
result.Transform = transform; result.VarFallback = fallback;
result.VarTransform = transform;
return result; return result;
} }
@ -104,7 +107,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules
var parts = BuildParts(text, @event); var parts = BuildParts(text, @event);
await Task.WhenAll(parts.Select(x => x.Replacement.AsTask())); await ValueTaskEx.WhenAll(parts.Select(x => x.Var));
return CombineParts(text, parts); return CombineParts(text, parts);
} }
@ -119,13 +122,13 @@ namespace Squidex.Domain.Apps.Core.HandleRules
{ {
if (!part.IsText) if (!part.IsText)
{ {
var result = part.Replacement.Result; var result = part.Var.Result;
result = TransformText(result, part.Transform); result = TransformText(result, part.VarTransform);
if (result == null) if (result == null)
{ {
result = part.Fallback; result = part.VarFallback;
} }
if (string.IsNullOrEmpty(result)) if (string.IsNullOrEmpty(result))
@ -137,7 +140,7 @@ namespace Squidex.Domain.Apps.Core.HandleRules
} }
else else
{ {
sb.Append(span.Slice(part.Offset, part.Length)); sb.Append(span.Slice(part.TextOffset, part.TextLength));
} }
} }

1
backend/src/Squidex.Domain.Apps.Core.Operations/Squidex.Domain.Apps.Core.Operations.csproj

@ -24,6 +24,7 @@
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="1.7.0" /> <PackageReference Include="System.Collections.Immutable" Version="1.7.0" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" /> <PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="ValueTaskSupplement" Version="1.1.0" />
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup>
<CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet> <CodeAnalysisRuleSet>..\..\Squidex.ruleset</CodeAnalysisRuleSet>

1
backend/tests/Squidex.Domain.Apps.Core.Tests/Operations/HandleRules/RuleEventFormatterTests.cs

@ -7,7 +7,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security.Claims; using System.Security.Claims;
using System.Threading.Tasks; using System.Threading.Tasks;
using FakeItEasy; using FakeItEasy;

Loading…
Cancel
Save