2013-09-27 2 views
1

XYZ 등을 수행하기 위해 일부 코드를 수정 중이며 문제가 발생합니다.비동기 작업 중에 HttpRuntime.Cache에 저장할 수 없습니다.

내가 보니이 라인이 HttpContext.Current

add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" 

그래서 내가 추가 한 위의 설정을 복원합니다 것을 알과는 HttpContext.Current 반환 한

public async Task<FileUploadResult> PostFile([FromUri]int width) 
{ 
    // Right here the HTTPContext.Current == null; 
    ... Some code here 
    await Request.Content.ReadAsMultipartAsync(streamProvider); 
} 

WebAPI 방법. HttpContext.Current.Cache 및 HttpRuntime.Cache에서 .Cache 개체에 액세스 (읽기) 할 수 있음을 알 수 있습니다.

하지만 어떤 이유로 캐시에 성공적으로 쓸 수 없습니다.

내 코드는 예외를 throw하지 않지만 캐시를 읽으려고하면 단순히 거기에 없습니다.

내 코드는 비동기 웹 API 호출 내부가 아닌 다른 모든 곳에서 잘 작동합니다. 이 문제에 어떤 도움을 크게 감상 할 수

private Cache sysCache = HttpContext.Current.Cache; 
// also treid private Cache sysCache = HttpRuntime.Cache 
sysCache.Insert(fileToCache.ToMD5HashString(), 
         fileToCache, 
         null, 
         Cache.NoAbsoluteExpiration, 
         new TimeSpan(0, 0, 5, 0)); 

캐시 코드입니다.

미리 감사드립니다.

+0

async를 입력하면 현재 컨텍스트 (HttpContext.Current 포함)가 손실됩니다. 현재 HttpContext를 인수로 전달하십시오. –

+0

나는 당신의 제안을 시도했지만, 불행히도 그것은 효과가 없었습니다. 내가 캐시에 저장할 수없는 뭔가가 여기에 있습니다. 캐시 (읽기)를 사용하여 제안 또는 key = "aspnet : UseTaskFriendlySynchronizationContext"value = "true"캐시에 저장되는 항목은 저장되지 않습니다. – QBM5

+0

문서에 "응용 프로그램 도메인 당 Cache 클래스의 인스턴스가 하나이므로 결과적으로 Cache 속성에서 반환하는 Cache 개체는 응용 프로그램 도메인의 모든 요청에 ​​대한 Cache 개체입니다." –

답변

1

도움 주셔서 대단히 감사합니다. 비동기 런타임과 전혀 관련이없는 것으로 나타났습니다. 캐시에 항목을 저장하는 클래스와 항목을 호출하려는 웹 API는 동일한 사이트 아래에있는 두 개의 서로 다른 응용 프로그램에 있었기 때문에 두 개의 다른 캐시 저장소가있었습니다.

관련 문제