Freigeben über


Unidirektionale Anfragen

Grains führen eine asynchrone Anforderungsausführung durch, was erfordert, dass alle Methoden der Grain-Schnittstellen einen asynchronen Typ zurückgeben, wie etwa Task. Beim Warten auf den Abschluss einer Aufgabe, die von einem Grain-Aufruf zurückgegeben wird, wird dem Aufrufer mitgeteilt, dass die Anforderung abgeschlossen ist, sodass der Aufrufer Ausnahmen bearbeiten oder Rückgabewerte erhalten kann. Orleans unterstützt auch unidirektionale Anforderungen, sodass Anrufer ein Grain über ein Ereignis benachrichtigen können, ohne Ausnahmen oder Abschlusssignale zu erwarten.

Einweg-Anfragen werden sofort an den Aufrufer zurückgegeben und signalisieren weder Fehler noch Abschluss. Eine einseitige Anfrage garantiert nicht einmal, dass der Empfänger die Anfrage erhalten hat. Der Hauptvorteil von unidirektionalen Anfragen besteht darin, dass sie Nachrichtenkosten sparen, die mit dem Senden einer Antwort an den Anrufer verbunden sind, und können daher die Leistung in einigen speziellen Fällen verbessern. Einweg-Anfragen sind ein erweitertes Leistungsmerkmal. Verwenden Sie sie mit Sorgfalt und nur dann, wenn Sie feststellen, dass eine einseitige Anforderung von Vorteil ist. Es wird empfohlen, routinemäßige bidirektionale Anfragen zu bevorzugen, die den Abschluss signalisieren und Fehler an die Aufrufer zurückmelden.

Sie können eine Anforderung unidirektional machen, indem Sie die Grainschnittstellenmethode mit der OneWayAttribute wie folgt markieren:

public interface IOneWayGrain : IGrainWithGuidKey
{
    [OneWay]
    Task Notify(MyData data);
}

Unidirektionale Anfragen müssen entweder Task oder ValueTask zurückgeben. Sie dürfen keine generischen Varianten dieser Typen (Task<TResult> und ValueTask<TResult>) zurückgeben.