コード例 #1
0
    // シリアルポート --> 抽象 Stream
    protected override async Task <bool> StreamReadFromObjectImplAsync(FastStreamBuffer fifo, CancellationToken cancel)
    {
        if (this.SerialPort.IsOpen == false)
        {
            throw new FastBufferDisconnectedException();
        }

        await TaskUtil.DoAsyncWithTimeout(
            async c =>
        {
            using (MemoryHelper.FastAllocMemoryWithUsing(RecvTmpBufferSize, out Memory <byte> buffer))
            {
                int recvSize = await this.Stream.ReadAsync(buffer, cancel);

                if (recvSize <= 0)
                {
                    fifo.Disconnect();
                    return(0);
                }

                fifo.EnqueueWithLock(buffer._SliceHead(recvSize)._CloneMemory(), true);
            }

            return(0);
        },
            cancelProc : () =>
        {
            this.SerialPort.Close();
        },
            cancel : cancel);

        return(true);
    }