Struct ZedalCallContext
- Namespace
- Zedal.Sdk
- Assembly
- Zedal.Sdk.dll
Bündelt die Aufrufer-Steuerung eines einzelnen API-Calls: Zeitgrenze, CancellationToken und optionale zusätzliche gRPC-Header.
public readonly struct ZedalCallContext
- Inherited Members
Examples
// Default-Deadline plus Abbruchmöglichkeit (implizite Konvertierung)
await client.CoreApi.Documents.ExportCurrentDocument(docId, context: token);
// Langläufer ohne Deadline — nur der Token bricht ab
await client.DiwassApi.AttachmentApi.GetAttachment(id,
ZedalCallContext.Default.WithCancellation(token).WithoutDeadline());
// Großzügige, aber endliche Deadline — Reihenfolge beliebig
await client.DiwassApi.AttachmentApi.GetAttachment(id,
ZedalCallContext.Default.WithTimeout(600).WithCancellation(token));
Remarks
Deadline und Cancellation sind zwei getrennte Schutzmechanismen und bewusst kombinierbar — was zuerst eintritt, gewinnt. Die Deadline schützt gegen einen Server, der nie antwortet (hängender Peer, half-open TCP); dagegen hilft kein Token, den niemand auslöst. Der Token deckt umgekehrt den Abbruch auf Aufruferwunsch ab (User klickt „Abbrechen", Host fährt herunter). Beide Fälle bleiben für Aufrufer unterscheidbar: eine gerissene Deadline kommt als RpcException mit DeadlineExceeded, ein Abbruch über den Token als OperationCanceledException — dafür sorgt Zedal.Sdk.Impl.CancellationTranslatingInterceptor.
Deshalb hebt ein übergebener Token die Deadline nicht automatisch auf. Wer die Zeitsteuerung vollständig selbst übernehmen will, sagt das explizit über WithoutDeadline() — typischerweise für Langläufer wie Attachment-Up- und -Downloads, die nicht in den 30-Sekunden-Default passen.
Der Default-Wert (default(ZedalCallContext), bzw. Default)
verhält sich exakt wie das bisherige Verhalten ohne Kontext: Deadline aus
DefaultTimeout, kein Token.
Alle With…-Methoden sind Instanz-Wither: jede liefert eine Kopie, in
der genau ein Feld geändert ist, und reicht die übrigen unverändert durch. Die
Reihenfolge einer Kette ist deshalb ohne Bedeutung. Einzige Ausnahme ist
WithFallbackTimeout(int), das bewusst nur greift, wenn der Aufrufer keine
eigene Zeitgrenze gesetzt hat — auch das aber unabhängig davon, ob die Zeitgrenze
vor oder nach dem Fallback gesetzt wurde.
Constructors
- ZedalCallContext(int, CancellationToken, Metadata)
Initialisiert einen Kontext.
Fields
- ClientDefaultTimeout
Timeout-Wert, der auf DefaultTimeout zurückfällt.
Properties
- CancellationToken
Token, mit dem der Aufrufer den laufenden Call abbrechen kann.
- Default
Neutraler Ausgangspunkt einer
With…-Kette; identisch zudefault(ZedalCallContext).
- ExtraHeaders
Optionale zusätzliche gRPC-Metadata-Header (z.B. DIWASS-Cache-Steuerung).
- TimeoutSeconds
Zeitgrenze in Sekunden.
0= Client-Default, NoTimeout = keine Deadline.
Methods
- ResolveDeadline(int)
Löst die effektive Deadline auf.
- WithAdditionalHeaders(Metadata)
Kopie dieses Kontexts, in der
additionalHeaderszu den bereits vorhandenen hinzukommen. Bei gleichem Key gewinnt der bestehende Eintrag.
- WithCancellation(CancellationToken)
Kopie dieses Kontexts mit gesetztem CancellationToken.
- WithExtraHeaders(Metadata)
Kopie dieses Kontexts mit gesetzten Zusatz-Headern. Ersetzt bereits gesetzte Header — für Aufrufer gedacht, die die Header eines Calls bestimmen. Eine SDK-Schicht, die ihre eigenen Header beisteuert, nimmt WithAdditionalHeaders(Metadata).
- WithFallbackTimeout(int)
Kopie dieses Kontexts mit
timeoutSecondsals Deadline — aber nur, wenn der Aufrufer keine eigene Zeitgrenze gesetzt hat.
- WithTimeout(int)
Kopie dieses Kontexts mit expliziter Deadline in Sekunden.
- WithoutDeadline()
Kopie dieses Kontexts ohne Deadline — dann ist der CancellationToken die einzige Abbruchbedingung. Für Langläufer (Attachment-Up-/Download, große Exporte), die nicht in den Client-Default passen.
Operators
- implicit operator ZedalCallContext(CancellationToken)
Erlaubt es, einen CancellationToken direkt an eine API-Methode zu übergeben, ohne den Kontext explizit zu konstruieren.