"RequestMessage()"라는 비동기 메서드가 있습니다. 이 방법에서 메시지 브로커에게 메시지를 보냅니다. 결과가 언제 나올지 몰라 "TaskCompletionSource"를 사용하고 있습니다. 응답 메시지가 도착했을 때 비동기 메서드를 종료해야합니다 (브로커에서 이벤트를 받겠습니다).비동기 메서드에서 시간 초과
이것은 지금까지 문제가 없습니다. 자, 제 문제는이 메시지에 결코 대답 할 수 없거나 적어도 늦게까지 할 수 있다는 것입니다.
내 제한 시간을 구현하기 위해 변경 사항을 찾고 있습니다. 그렇게하기 위해 Timer와 Reactive Extensions의 Observer를 시도했습니다. Th 문제는 항상 동일합니다. .NET Core 2를 사용하고 SynchronizationContext가 없기 때문에 주 스레드와 타이머 스레드를 동기화 할 수 없습니다.
그래서, 내 코드에서
Observable
.Interval(TimeSpan.FromSeconds(timeOutInSeconds))
.Subscribe(
x =>
{
timeoutCallback();
});
시간이 콜백을 만료되면 호출해야합니다 .. 관찰자가있다. 이 메인 스레드에 슬로우되지 않는 이상, 당신은 이미 실현으로
TimeoutDelegate timeoutHandler =() => throw new WorkcenterRepositoryCommunicationException("Broker communication timed out.", null);
는,이 예외가 사로 잡았되지 않습니다 : 내 발신자 방법에서, 나는 콜백이 방법을 처리합니다.
여기서 스레드를 동기화 할 수 있습니까?
미리 감사드립니다.
어떻게 중개인에게 메시지를 보내시겠습니까? HttpClient? 다른 것? –