Ler em inglês

Compartilhar via


Solicitações unidirecionais

As granularidades executam a execução de solicitação assíncrona, exigindo que todos os métodos de interface de granularidade retornem um tipo assíncrono, como Task. Aguardar a conclusão de uma tarefa retornada de uma chamada de granularidade notifica o chamador de que a solicitação foi concluída, permitindo que ele manipule exceções ou receba valores retornados. Orleans também dá suporte a solicitações unidirecionais, permitindo que os chamadores notifiquem uma granularidade 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 computador chamado 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 ao 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 determinou que uma solicitação unidirecional é benéfica. É recomendável 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ãos com o OneWayAttribute, da seguinte forma:

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

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