복붙노트

[REDIS] StackExchange.Redis에서 비동기 명령과 Task.WhenAny 기다리고 있습니다 후 시간 제한 예외

REDIS

StackExchange.Redis에서 비동기 명령과 Task.WhenAny 기다리고 있습니다 후 시간 제한 예외

나는 소위 타임 아웃을 수행 HGET 회사가 발생 해요 : 제품 : 설정을 INST : 1, 큐 : 8, 한때 = 0 일, QS = 8, 품질 관리 = 0, WR = / 0 0, 79 명 / 1 시간 제한의 예외 .

같은 레디 스 인스턴스와 동일한 시스템에 데이터가 저장되어 있기 때문에 이상하다, 그러나이 예외를 throw 특정 응용 프로그램입니다. 업데이트 : 사실, 동일한 애플리케이션은 하나 개의 라인은 상기 레디 스로부터 데이터를 수신한다. 문제는 HGET 함께.

또한, 나는 운이 6 초 멀티플렉서 구성에 대한 시간 제한을 증가했습니다.

또한, 나는 IDatabase 인스턴스가 진정한 가치는, isConnected 것을 확인했습니다.

어떻게 이러한 오류 메시지를 해석하고 전체 제한 시간 뒤에 문제가 무엇합니까?

나는 성공적으로 몇 가지 코드 섹션 데이터베이스를 얻을 때 변화 문제를 해결했습니다 (즉 multiplexer.GetDatabase ()).

StackExchange.Redis 문서에 설명 된대로 멀티플렉서는 응용 프로그램 도메인 당 인스턴스를 가지고 있지만, 제어 부품의 많은 반전들이 자신의 코드에 IDatabase의 여러 인스턴스를 만들 수 있습니다. 즉, IDatabase 인스턴스는 공유되지 않습니다.

실제 코드는 ListRightPopLeftPush을 수행하고, 그 후,이 성분 중에 instatiation 해시 키를 판독 제어 컴포넌트의 반전 인스턴스화있다. 소위 ListRightPopLeftPush을하기 전에 전체 구성 요소를 인스턴스화 경우, 전체 HashGet는 시간 제한 예외를 발생하지 않습니다.

이 읽기 작업을 수행 할 때 ListRightPopLeftPush 다른 IDatabase 인스턴스에서 실행되는 경우에도, 그 다음 IDatabase 인스턴스에 문제의 어떤 종류를 생산하는 것 같다.

어쨌든, 내 수정 질문에 대답하지 않습니다. 난 그냥 우리가 문제 자체 솔루션 무엇을 찾을 수 있습니다 더 자세한 정보를 추가했습니다.

어쨌든, 위의 "수정"더 읽기 레디 스에 액세스가 해결되지 않습니다. 본인은 통화에서 같은 시간 제한 예외를 받고 있어요. 이제 예외의 메시지에서 발견 paramater에서 60/1를 말한다.

해결법

  1. ==============================

    1.(: 우리는 종종 않는) 채팅에서 오랜 토론, 굴착 많은 바탕으로, 우리가 .TrySetResult 같은 일을 할 때 일부 모호한 상황에서 TPL은 전용 리더 스레드를 하이재킹처럼 보인다. 당신이 동기 호출을 할 경우는 (오직 그 자체로 완성 될 것이다) 완료에 대한 작업에 바쁜 대기 인 경우는 아마도 어떤 소켓 데이터를 처리 할 수 ​​없기 때문에이 인스턴트의 교착 상태가 발생합니다. 우리는 실제로 특별히이를 방지하기 위해 자리에 코드를 가지고,하지만 해결 방법이 실제로 다른 시나리오에서 일어날를 강제 것 같습니다. 어떤 ... 끔찍한입니다. 내가 찾을 수있는 볼 수 있습니다. 그러나 기본적으로, 문제는 현재 일부 제한된 상황에서, TaskCompletionSource.TrySetResult는 TPL에 힘을주고하는 것은 동기의 연속 요청을 실행하는 것입니다. 이 Task.WhenAny이 포함되어 있습니다.

    (: 우리는 종종 않는) 채팅에서 오랜 토론, 굴착 많은 바탕으로, 우리가 .TrySetResult 같은 일을 할 때 일부 모호한 상황에서 TPL은 전용 리더 스레드를 하이재킹처럼 보인다. 당신이 동기 호출을 할 경우는 (오직 그 자체로 완성 될 것이다) 완료에 대한 작업에 바쁜 대기 인 경우는 아마도 어떤 소켓 데이터를 처리 할 수 ​​없기 때문에이 인스턴트의 교착 상태가 발생합니다. 우리는 실제로 특별히이를 방지하기 위해 자리에 코드를 가지고,하지만 해결 방법이 실제로 다른 시나리오에서 일어날를 강제 것 같습니다. 어떤 ... 끔찍한입니다. 내가 찾을 수있는 볼 수 있습니다. 그러나 기본적으로, 문제는 현재 일부 제한된 상황에서, TaskCompletionSource.TrySetResult는 TPL에 힘을주고하는 것은 동기의 연속 요청을 실행하는 것입니다. 이 Task.WhenAny이 포함되어 있습니다.

  2. from https://stackoverflow.com/questions/25567566/timeout-exception-after-async-commands-and-task-whenany-awaits-in-stackexchange by cc-by-sa and MIT license