Akka.Interfaced.SlimSocket.Server.InterlockedCountFlag.Decrement C# (CSharp) Метод

Decrement() публичный Метод

public Decrement ( ) : bool
Результат bool
        public bool Decrement()
        {
            while (true)
            {
                var v = _value;
                if (v < 2)
                    throw new InvalidOperationException("Already Zero");
                var vNew = v - 2;
                if (Interlocked.CompareExchange(ref _value, vNew, v) == v)
                    return vNew == 1;
            }
        }

Usage Example

        private void OnReceiveComplete(object sender, SocketAsyncEventArgs args)
        {
            // 비동기 완료 및 재진입 처리

            if (args.SocketError != SocketError.Success)
            {
                HandleSocketError(args.SocketError);
                return;
            }

            var len = args.BytesTransferred;

            if (len == 0)
            {
                HandleSocketError(SocketError.Shutdown);
                return;
            }

            // Deserialize packet

            if (_receiveLargeBuffer == null)
            {
                if (TryDeserializeNormalPacket(len) == false)
                {
                    return;
                }
            }
            else
            {
                if (TryDeserializeLargePacket(len) == false)
                {
                    return;
                }
            }

            if (_issueCountFlag.Decrement())
            {
                ProcessClose();
                return;
            }

            IssueReceive();
        }