src/Proton.Client/Client/NextReceiverPolicy.cs (11 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ namespace Apache.Qpid.Proton.Client { /// <summary> /// Determines the behavior of a Session when the next receiver method is called /// on that session. Each policy provides a contract on the ordering of returned /// receivers from the next receiver API when there are receivers with locally /// queued deliveries. When there are no Receiver instances that have locally /// queued deliveries the next receive API will return the next receiver to /// receive a complete incoming delivery unless a timeout was given and that /// time period expires in which case it will return null. /// /// Should the user perform receive calls on a Receiver directly in multiple /// threads the behavior of the next receiver API is undefined and it becomes possible /// that the resulting receiver returned from that API will have no actual pending /// deliveries due to a race. In most cases the caller can mitigate some risk by using /// the Receiver tryReceive API and accounting for a null result. /// </summary> public enum NextReceiverPolicy { /// <summary> /// Examines the list of currently open receivers in the session and returns /// the next receiver that has a pending delivery that follows the previously /// returned receiver (if any) otherwise the first receiver in the session with /// a pending delivery is returned. The order of receivers returned will likely /// be creation order however the implementation is not required to follow this /// pattern so the caller should not be coded to rely on that ordering. /// </summary> RoundRobin, /// <summary> /// Examines the list of currently open receivers in the session and returns a /// random selection from the set of receivers that have a pending delivery /// immediately available. This provides a means of selecting receivers which /// is not prone to sticking to a highly active receiver which can starve out /// other receivers which receive only limited traffic. /// </summary> Random, /// <summary> /// Examines the list of currently open receivers in the session and returns the /// first receiver found with an available delivery. This can result in starvation /// if that receiver has a continuous feed of new deliveries from the remote as it /// will be repeatedly selected by the next receiver API. /// </summary> FirstAvailable, /// <summary> /// Examines the list of currently open receivers in the session and returns the /// receiver with the largest backlog of available deliveries. This can result in /// starvation if that receiver has a continuous feed of new deliveries from the /// remote as it will likely be repeatedly selected by the next receiver API. /// </summary> LargestBacklog, /// <summary> /// Examines the list of currently open receivers in the session and returns the /// receiver with the smallest backlog of available deliveries. /// </summary> SmallestBacklog } }