Ler em inglês

Partilhar via


Pedidos unidirecionais

Os grãos executam a execução assíncrona de solicitações, exigindo que todos os métodos de interface de grãos retornem um tipo assíncrono, como Task. Aguardando a conclusão de uma tarefa retornada de uma chamada de grão notifica o chamador de que a solicitação foi concluída, permitindo que ele manipule quaisquer exceções ou receba valores de retorno. Orleans também suporta solicitações unidirecionais, permitindo que os chamadores notifiquem um grão sobre um evento sem esperar exceções ou sinais de conclusão.

As solicitações unidirecionais retornam ao chamador imediatamente e não sinalizam falha ou conclusão. Uma solicitação unidirecional nem sequer garante que o destinatário recebeu a solicitação. O principal benefício de uma solicitação unidirecional é que eles economizam custos de mensagens associados ao envio de uma resposta de volta para o chamador e, portanto, podem melhorar o desempenho em alguns casos especializados. As solicitações unidirecionais são um recurso de desempenho avançado e devem ser usadas com cuidado e somente quando um desenvolvedor determinar que uma solicitação unidirecional é benéfica. Recomenda-se preferir solicitações bidirecionais regulares, que sinalizam a conclusão e propagam erros de volta para os chamadores.

Uma solicitação pode ser feita de uma maneira, marcando o método de interface de grão com o OneWayAttribute, assim:

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

As solicitações unidirecionais devem retornar ou Task ValueTask e não devem retornar variantes genéricas desses tipos (Task<TResult> e ValueTask<TResult>).