반응형
문을 사용하고 키워드가 C #에서 멋지게 재생됩니다.
async
반환 및 IDisposable
인스턴스 메서드를 호출 하는 상황이 있습니다. 예를 들면 :
HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com"));
이전 async
에는 IDisposable
인스턴스 작업을 할 때 "response"변수를 사용하는이 호출과 코드가 using 문으로 래핑됩니다.
내 질문은 async
키워드가 믹스에 던져 질 때 여전히 올바른 접근 방식인지 여부입니다 . 코드가 컴파일 되더라도 using 문은 아래 두 예제에서 모두 예상대로 작동합니까?
예 1
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
// Do something with the response
return true;
}
예 2
using(HttpResponseMessage response = await httpClient.GetAsync(new Uri("http://www.google.com")))
{
await this.responseLogger.LogResponseAsync(response);
return true;
}
예, 괜찮습니다.
첫 번째 경우에는 실제로 다음과 같이 말합니다.
- 응답을받을 수있을 때까지 비동기 적으로 기다립니다.
- 그것을 사용하고 즉시 폐기하십시오
두 번째 경우에는 다음과 같이 말합니다.
- 응답을받을 수있을 때까지 비동기 적으로 기다립니다.
- 응답을 기록 할 때까지 비동기 적으로 기다립니다.
- 응답 폐기
using
비동기 메서드 의 문 Dispose
은 리소스를 획득 한 스레드와 다른 스레드에서 호출이 실행될 수 있지만 (동기화 컨텍스트 등에 따라 다름) 여전히 발생 한다는 점에서 "이상한" 것입니다. 기다리고있는 것을 가정하면 지금 까지 보여줍니다 또는 물론, 실패합니다. ( 문에 반환되지 않는 메서드에 대한 호출이 포함 된 Dispose
경우 비동기 코드에서 호출하지 않는 것과 같습니다 using
.)
반응형
'Programing' 카테고리의 다른 글
passport.js passport.initialize () 미들웨어가 사용되지 않음 (0) | 2020.09.01 |
---|---|
cURL로 $ _POST 값 전달 (0) | 2020.09.01 |
특정 파일의 오류를 무시하도록 Eclipse 설정 변경 (0) | 2020.08.31 |
"AUTO"전략을 사용할 때 Doctrine을 사용하여 명시 적으로 Id 설정 (0) | 2020.08.31 |
WCF 대 ASP .Net 웹 API (0) | 2020.08.31 |