콘텐츠로 이동
무료 평가 시작

PDComm.Secs1Worker

클래스

SECS-I(SEMI E4) 직렬 회선 프로토콜 끝점을 전용 백그라운드 스레드에서 실행합니다.

public sealed class Secs1Worker : IAsyncDisposable

직렬 포트는 애플리케이션이 소유합니다. 애플리케이션이 Secs1Read와 Secs1Write 콜백을 전달하며, 작업자는 포트를 열거나 닫지 않습니다. 작업자 스레드는 네이티브 끝점을 만들고, 폴링하고, 소멸시키며, 콜백을 호출합니다. 끝점의 타이머는 밀리초 시계로 동작하므로 Secs1Options의 모든 *Ticks 값은 밀리초입니다.

메시지는 Secs1Worker.SubmitAsync로 제출하며(송신 메시지는 한 번에 하나씩 전송), 결과와 수신 메시지는 Secs1Worker.ReadEventsAsync로 읽습니다. 작업자는 이벤트 버퍼에 최대 크기 메시지 하나를 더 담을 공간이 있을 때만 회선을 폴링하므로, 이벤트를 계속 읽어야 합니다.

HsmsWorker와 달리 명령 메서드는 큐 오류와 상태 오류를 동기적으로 throw합니다. 콜백 안에서 메서드를 호출하면 InvalidOperationException을 throw합니다.

멤버

DisposeAsync

메서드

작업자 스레드를 중지하며, 작업자 스레드는 네이티브 끝점을 중지하고 소멸시킵니다.

public ValueTask DisposeAsync()

큐의 명령은 ObjectDisposedException으로 실패합니다. 스레드가 Secs1WorkerOptions.ShutdownTimeoutMilliseconds 안에 종료되지 않으면 반환된 작업이 TimeoutException으로 실패하고, 작업자가 실패했으면 작업자의 치명적 오류로 실패합니다.

반환값

작업자 스레드가 종료되면 완료되는 작업입니다.

참고

  • InvalidOperationException 예외: 읽기 또는 쓰기 콜백에서 메서드를 호출했습니다.

GetStateAsync

메서드

작업자 스레드에서 끝점의 수명 주기 플래그를 읽습니다.

public Task<Secs1State> GetStateAsync(CancellationToken cancellationToken = default)

매개변수

이름설명
cancellationToken아직 실행을 시작하지 않은 명령을 취소하는 토큰입니다.

반환값

끝점 상태의 스냅샷을 결과로 갖는 작업입니다.

참고

  • InvalidOperationException 예외: 읽기 또는 쓰기 콜백에서 메서드를 호출했습니다.
  • OperationCanceledException 예외: cancellationToken이 이미 취소되었습니다.
  • ObjectDisposedException 예외: 작업자가 중지 중이거나 종료되었습니다.
  • PdcommException 예외: 명령 큐나 Secs1WorkerOptions.MaxCommandBytes가 가득 찼습니다(PdcommStatus.Backpressure).

ReadEventsAsync

메서드

끝점이 만든 이벤트를 순서대로 읽습니다.

public IAsyncEnumerable<Secs1Event> ReadEventsAsync(CancellationToken cancellationToken = default)

매개변수

이름설명
cancellationTokenOperationCanceledException으로 열거를 끝내는 토큰입니다.

반환값

이벤트의 비동기 시퀀스입니다. 본문은 관리 복사본이므로 이벤트를 해제할 필요가 없습니다. 시퀀스는 작업자가 종료되면 끝나며, 작업자가 실패했으면 작업자의 치명적 오류를 throw합니다.

ResetAsync

메서드

끝점이 재개할 수 있도록 회선 결함을 지웁니다.

public Task ResetAsync(CancellationToken cancellationToken = default)

매개변수

이름설명
cancellationToken아직 실행을 시작하지 않은 명령을 취소하는 토큰입니다.

반환값

결함이 지워지면 완료되는 작업입니다. 일부만 진행된 전송은 버려집니다. 작업은 PdcommException으로 실패할 수 있습니다. 끝점이 중지되었으면 PdcommStatus.InvalidState, 회선에 결함이 없으면 PdcommStatus.Backpressure입니다.

참고

  • InvalidOperationException 예외: 읽기 또는 쓰기 콜백에서 메서드를 호출했습니다.
  • OperationCanceledException 예외: cancellationToken이 이미 취소되었습니다.
  • ObjectDisposedException 예외: 작업자가 중지 중이거나 종료되었습니다.
  • PdcommException 예외: 명령 큐나 Secs1WorkerOptions.MaxCommandBytes가 가득 찼습니다(PdcommStatus.Backpressure).

RestartAsync

메서드

중지된 끝점을 새 세대로 다시 시작합니다.

public Task RestartAsync(CancellationToken cancellationToken = default)

매개변수

이름설명
cancellationToken아직 실행을 시작하지 않은 명령을 취소하는 토큰입니다.

반환값

끝점이 시작되면 완료되는 작업입니다. 이전 세대의 토큰은 더 이상 일치하지 않습니다. 끝점이 실행 중이면 PdcommException(PdcommStatus.InvalidState)으로 작업이 실패합니다.

참고

  • InvalidOperationException 예외: 읽기 또는 쓰기 콜백에서 메서드를 호출했습니다.
  • OperationCanceledException 예외: cancellationToken이 이미 취소되었습니다.
  • ObjectDisposedException 예외: 작업자가 중지 중이거나 종료되었습니다.
  • PdcommException 예외: 명령 큐나 Secs1WorkerOptions.MaxCommandBytes가 가득 찼습니다(PdcommStatus.Backpressure).

StartAsync

메서드

새 작업자 스레드에서 SECS-I 끝점을 만들고 시작합니다.

public static Task<Secs1Worker> StartAsync(Secs1Options options, Secs1WorkerOptions policy, Secs1Read read, Secs1Write write, CancellationToken cancellationToken = default)

매개변수

이름설명
options회선 타이밍, 재시도, 용량 옵션입니다.
policy작업자의 큐 용량과 타이밍입니다.
read직렬 회선에서 바이트를 읽는 콜백입니다.
write직렬 회선에 바이트를 쓰는 콜백입니다.
cancellationToken작업자 스레드가 시작되기 전에 한 번 확인하는 토큰입니다. 진행 중인 시작은 취소하지 않습니다.

반환값

실행 중인 작업자를 결과로 갖는 작업입니다. 호출자가 작업자를 소유하며 해제해야 합니다. 네이티브 끝점을 만들거나 시작할 수 없으면 PdcommException으로 작업이 실패합니다. 예를 들어 options가 잘못되었으면 PdcommStatus.InvalidArgument입니다.

참고

  • ArgumentNullException 예외: 인수가 null입니다.
  • OperationCanceledException 예외: cancellationToken이 이미 취소되었습니다.
  • NotSupportedException 예외: 로드된 네이티브 라이브러리가 SECS-I API를 내보내지 않습니다.
  • ArgumentOutOfRangeException 예외: policy의 용량이나 간격이 양수가 아니거나 바이트 예산이 음수이거나, Secs1Options.MaxBodyBytes 또는 Secs1Options.MaxIoChunk가 Int32.MaxValue를 초과하거나, Secs1WorkerOptions.MaxEventBytes가 Secs1Options.MaxBodyBytes보다 작습니다.

StopAsync

메서드

콜백을 호출하지 않고 끝점을 중지하며 런타임 상태를 삭제합니다.

public Task StopAsync(CancellationToken cancellationToken = default)

매개변수

이름설명
cancellationToken아직 실행을 시작하지 않은 명령을 취소하는 토큰입니다.

반환값

끝점이 중지되면 완료되는 작업입니다. 작업자 스레드는 계속 실행됩니다. 새 세대를 시작하려면 Secs1Worker.RestartAsync를, 종료하려면 Secs1Worker.DisposeAsync를 호출합니다. 끝점이 이미 중지되었으면 PdcommException(PdcommStatus.InvalidState)으로 작업이 실패합니다.

참고

  • InvalidOperationException 예외: 읽기 또는 쓰기 콜백에서 메서드를 호출했습니다.
  • OperationCanceledException 예외: cancellationToken이 이미 취소되었습니다.
  • ObjectDisposedException 예외: 작업자가 중지 중이거나 종료되었습니다.
  • PdcommException 예외: 명령 큐나 Secs1WorkerOptions.MaxCommandBytes가 가득 찼습니다(PdcommStatus.Backpressure).

SubmitAsync

메서드

직렬 회선으로 전송할 메시지를 큐에 넣습니다.

public Task<Secs1Token> SubmitAsync(Secs1Message message, CancellationToken cancellationToken = default)

매개변수

이름설명
message보낼 메시지입니다. 본문은 복사됩니다.
cancellationToken아직 실행을 시작하지 않은 명령을 취소하는 토큰입니다.

반환값

끝점이 메시지를 수락하면 메시지의 토큰을 결과로 갖는 작업입니다. 결과는 나중에 그 토큰을 가진 Secs1EventKind.OutboundComplete 또는 Secs1EventKind.OutboundFailed 이벤트로 도착합니다. 작업은 PdcommException으로 실패할 수 있습니다. 다른 메시지를 아직 보내는 중이면 PdcommStatus.Backpressure, 끝점이 중지되었거나 결함 상태이면 PdcommStatus.InvalidState, 헤더가 잘못되었으면 PdcommStatus.InvalidArgument, 메시지가 Secs1Options.MaxOutboundBodyBytes 또는 Secs1Options.MaxOutboundBlocks를 넘으면 PdcommStatus.LimitExceeded입니다.

참고

  • ArgumentNullException 예외: message가 null입니다.
  • InvalidOperationException 예외: 읽기 또는 쓰기 콜백에서 메서드를 호출했습니다.
  • OperationCanceledException 예외: cancellationToken이 이미 취소되었습니다.
  • ObjectDisposedException 예외: 작업자가 중지 중이거나 종료되었습니다.
  • PdcommException 예외: 본문이 Secs1Options.MaxBodyBytes보다 크거나(PdcommStatus.LimitExceeded), 명령 큐나 Secs1WorkerOptions.MaxCommandBytes가 가득 찼습니다(PdcommStatus.Backpressure).

CallbackException

속성

읽기 또는 쓰기 콜백이 가장 최근에 throw한 예외를 가져옵니다. throw한 예외가 없으면 null입니다.

public Exception? CallbackException { get; }

예외를 throw하거나 버퍼보다 많은 바이트를 보고하는 콜백은 끝점에 Secs1IoStatus.Other로 보고되며, 이는 회선에 결함을 일으킵니다.

Completion

속성

작업자 스레드가 종료되면 완료되거나, 작업자를 종료시킨 오류로 실패하는 작업을 가져옵니다.

public Task Completion { get; }