WCF 번역 서비스를 구축 중입니다. 이 서비스는 google translat의 웹 API를 사용합니다. 자주 검색되는 쿼리를 다시 가져 오는 것을 피하기 위해 서비스는 마지막 검색의 메모리 캐시를 유지합니다. 검색 기능은 먼저 캐시를 확인한 다음 Google에 요청을 보냅니다. 마지막으로 중요한 세부 정보 - 요청이 도착할 때마다 키가되도록 문자열을 구성합니다. 검색 용어와 두 언어의 코드로 구성되어 있으므로 특정 검색마다 고유합니다.웹 요청 당 고유 잠금 개체
질문은 다음과 같습니다. 두 개의 정확한 요청이 동시에 도착한다고 가정하면 입력 할 때 이미 입력 된 검색 결과를 찾을 수 있도록 전체 검색 기능에서 두 번째 요청을 잠급니다 첫 번째 캐시에서 캐시로. 다른 요청이 도착하면 나는 그것을 들여 보내고 싶다.
내 생각은 내가 만든 문자열을 사용하여 자물쇠를다는 것이었다. 이것은 정확한 검색 (동일한 검색어, 같은 언어)마다 고유 한 것이기 때문이다. 이것이 내가 설명한 결과를 줄 것입니까?
까지이 글을 읽고에 대한감사합니다 (:
이이 코드 아래 예를 참조하십시오 - 다시 덕분에이 같은
public async Task<TranslationResult> TranslateAsync(Langueges From, Langueges To, string Content)
{
string key = Content + From.ToString() + To.ToString();
lock(key)
{
//look for the search result in the cache
//if not found, request from google and store result in the memory cache
}
}
새 문자열에 잠금을 설정하는 것은 의미가 없지만, 다른 모든 스레드를 차단하는 것이 좋습니다. 일부 비동기 알림이 대신 수행하는지 고려하십시오. –