Прочитать на английском

Поделиться через


Односторонняя запросы

Зерна выполняют асинхронное выполнение запроса, требуя, чтобы все методы интерфейса зерна возвращали асинхронный тип, например Task. Ожидание завершения задачи, возвращаемой из вызова зерна, уведомляет вызывающий объект о завершении запроса, позволяя им обрабатывать все исключения или получать возвращаемые значения. Orleans также поддерживает односторонние запросы, что позволяет вызывающим абонентам уведомлять о событии без ожидания исключений или сигналов завершения.

Односторонние запросы немедленно возвращаются вызывающей стороне и не сигнализируют о сбое или завершении. Односторонний запрос даже не гарантирует, что вызывающий объект получил запрос. Основное преимущество одностороннее запроса заключается в том, что они экономят затраты на обмен сообщениями, связанные с отправкой ответа обратно вызывающей стороне и поэтому могут повысить производительность в некоторых специализированных случаях. Односторонняя функция — это расширенная функция производительности, которую следует использовать с осторожностью, и только если разработчик определил, что односторонняя заявка полезна. Рекомендуется предпочитать регулярные двунаправленные запросы, которые сигнализируют о завершении и распространении ошибок обратно вызывающему объекту.

Запрос можно сделать одним из способов, пометив метод интерфейса зерна следующим OneWayAttributeобразом:

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

Односторонняя запросы должны возвращать Task или ValueTask не должны возвращать универсальные варианты этих типов (Task<TResult> и ValueTask<TResult>).