Pinguteca.Sdk.Core.Hedge
0.4.0
dotnet add package Pinguteca.Sdk.Core.Hedge --version 0.4.0
NuGet\Install-Package Pinguteca.Sdk.Core.Hedge -Version 0.4.0
<PackageReference Include="Pinguteca.Sdk.Core.Hedge" Version="0.4.0" />
<PackageVersion Include="Pinguteca.Sdk.Core.Hedge" Version="0.4.0" />
<PackageReference Include="Pinguteca.Sdk.Core.Hedge" />
paket add Pinguteca.Sdk.Core.Hedge --version 0.4.0
#r "nuget: Pinguteca.Sdk.Core.Hedge, 0.4.0"
#:package Pinguteca.Sdk.Core.Hedge@0.4.0
#addin nuget:?package=Pinguteca.Sdk.Core.Hedge&version=0.4.0
#tool nuget:?package=Pinguteca.Sdk.Core.Hedge&version=0.4.0
Pinguteca.Sdk.Core.Hedge
Hedged-requests gRPC interceptor for Pinguteca SDK clients. Layer 3
companion to Pinguteca.Sdk.Core.
Ships separately because parallel-attempt orchestration is ecosystem-native (Tasks plus Channels in .NET, goroutines plus channels in Go, Tokio mpsc in Rust, etc.) and because hedge is an opt-in tail-latency tool that multiplies backend load. Cross-SDK contract pinned in RFC 0013.
Install
dotnet add package Pinguteca.Sdk.Core.Hedge
What ships
HedgeInterceptorruns up to N parallel attempts of the same RPC and returns the first successful response, cancelling the others.- Default policy: 3 total attempts, 50 ms stagger, hedges only
methods that return
HedgeEligibility.NoSideEffectsfrom the caller-suppliedIsHedgeEligiblehook.Idempotentmethods are skipped unlessHedgeIdempotent = true. - LAST observed error returned on all-fail (most-recent-state).
- Streaming RPCs pass through unchanged.
Quickstart
using Grpc.Core.Interceptors;
using Grpc.Net.Client;
using Pinguteca.Sdk.Core.Hedge;
var channel = GrpcChannel.ForAddress("https://api.example.com");
var invoker = channel.Intercept(new HedgeInterceptor(new()
{
IsHedgeEligible = method => method.EndsWith("/Read")
? HedgeEligibility.NoSideEffects
: HedgeEligibility.Unknown,
}));
var client = new YourService.YourServiceClient(invoker);
Hedge attempts count as retry attempts to the outer retry
interceptor; lower RetryOptions.MaxAttempts accordingly to keep
total request volume bounded.
Docs
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Grpc.Core.Api (>= 2.80.0)
- Grpc.Net.Client (>= 2.80.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.8)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.