Udostępnij za pośrednictwem


IInputChannel.BeginTryReceive(TimeSpan, AsyncCallback, Object) Metoda

Definicja

Rozpoczyna operację asynchroniczną w celu odebrania komunikatu, który ma określony limit czasu i skojarzony z nim obiekt stanu.

public:
 IAsyncResult ^ BeginTryReceive(TimeSpan timeout, AsyncCallback ^ callback, System::Object ^ state);
public IAsyncResult BeginTryReceive (TimeSpan timeout, AsyncCallback callback, object state);
abstract member BeginTryReceive : TimeSpan * AsyncCallback * obj -> IAsyncResult
Public Function BeginTryReceive (timeout As TimeSpan, callback As AsyncCallback, state As Object) As IAsyncResult

Parametry

timeout
TimeSpan

Określa TimeSpan interwał czasu oczekiwania na udostępnienie komunikatu.

callback
AsyncCallback

Delegat AsyncCallback , który odbiera powiadomienie o zakończeniu operacji asynchronicznej.

state
Object

Obiekt określony przez aplikację zawierający informacje o stanie skojarzone z operacją asynchroniczną.

Zwraca

Element IAsyncResult odwołujący się do operacji odbierania asynchronicznego.

Wyjątki

timeout Określona wartość zostanie przekroczona przed ukończeniem operacji.

Określony limit czasu jest mniejszy niż zero.

Przykłady

Poniższy kod ilustruje sposób implementowania tej metody:

public IAsyncResult BeginTryReceive(TimeSpan timeout, AsyncCallback callback, object state)
{
    TryReceiveAsyncResult<TChannel> result = new TryReceiveAsyncResult<TChannel>(this, timeout, callback, state);
    result.Begin();
    return result;
}

Uwagi

Użyj metody asynchronicznej BeginTryReceive(TimeSpan, AsyncCallback, Object) , jeśli chcesz, aby przetwarzanie aplikacji było kontynuowane bez oczekiwania. Użyj metody synchronicznej TryReceive(TimeSpan, Message) , gdy jest akceptowalna, aby bieżący wątek był blokowany, gdy odpowiada na komunikat żądania lub do momentu przekroczenia interwału przekroczenia limitu czasu.

Operacja nie zostanie ukończona, dopóki komunikat nie stanie się dostępny w kanale lub upłynął limit czasu.

Jeśli zamierzasz obsługiwać przekroczenia limitu czasu, a nie tylko ponownie zgłaszać lub opakowować element , należy wywołać metodę TimeoutExceptionBeginTryReceive(TimeSpan, AsyncCallback, Object) zamiast BeginReceive.

Jeśli nie będziesz traktować limitów czasu specjalnie, po prostu wywołaj metodę BeginReceive, w przeciwnym razie utracisz informacje o błędzie.

Uwagi dotyczące implementowania

Operacja jest zwracana false z EndTryReceive(IAsyncResult, Message) wartości, jeśli określona timeout wartość zostanie przekroczona.

Dotyczy