Leggere in inglese

Condividi tramite


Richieste unidirezionali

I grani eseguono le richieste in modo asincrono, richiedendo a tutti i metodi di interfaccia di restituire un tipo asincrono, ad esempio Task. In attesa del completamento di un'attività restituita da una chiamata grana, notifica al chiamante che la richiesta è stata completata, consentendogli di gestire eventuali eccezioni o ricevere valori restituiti. Orleans supporta anche le richieste unidirezionali, consentendo ai chiamanti di notificare i grani relativi a un evento, senza aspettarsi eccezioni o segnali di completamento.

Le richieste unidirezionali tornano immediatamente al chiamante e non segnalano gli errori o il completamento. Una richiesta unidirezionale non garantisce nemmeno che il computer chiamato abbia ricevuto la richiesta. Il vantaggio principale di una richiesta unidirezionale è che consentano di risparmiare i costi di messaggistica associati all'invio di una risposta al chiamante e quindi in alcuni casi specialistici, possono migliorare le prestazioni. Le richieste unidirezionali sono una funzionalità di prestazioni avanzate e devono essere usate con attenzione, solo quando lo sviluppatore ha determinato che una richiesta unidirezionale possa portare benefici. È consigliabile preferire le normali richieste bidirezionali, che segnalano il completamento e rimandano gli errori ai chiamanti.

Una richiesta può essere unidirezionale contrassegnando il metodo di interfaccia della grana con OneWayAttribute, come descritto di seguito:

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

Le richieste unidirezionali devono restituire Task o ValueTask e non devono restituire varianti generiche di tali tipi (Task<TResult> e ValueTask<TResult>).