동기화 찾기와 동기화 찾기의 차이점
저는 매우 간단한 쿼리를 작성하고 있습니다. 컬렉션에서 고유 ID에 따라 문서를 가져옵니다.약간의 좌절 끝에 (저는 mongo와 async/wait 프로그래밍 모델이 처음입니다), 저는 이것을 알게 되었습니다.
IMongoCollection<TModel> collection = // ...
FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
IAsyncCursor<TModel> task = await collection.FindAsync(x => x.Id.Equals(id), options);
List<TModel> list = await task.ToListAsync();
TModel result = list.FirstOrDefault();
return result;
효과가 있어요, 좋습니다!하지만 계속해서 "찾기" 방법에 대한 언급을 보고, 다음과 같은 문제를 해결했습니다.
IMongoCollection<TModel> collection = // ...
IFindFluent<TModel, TModel> findFluent = collection.Find(x => x.Id == id);
findFluent = findFluent.Limit(1);
TModel result = await findFluent.FirstOrDefaultAsync();
return result;
밝혀진 바에 따르면, 이것도 효과가 있습니다, 훌륭합니다!
저는 우리가 이러한 결과를 달성하기 위해 두 가지 다른 방법을 가지고 있는 중요한 이유가 있다고 확신합니다.이러한 방법론의 차이점은 무엇이며, 왜 제가 다른 방법론보다 하나를 선택해야 합니까?
구문에 차이가 있습니다. Find그리고.FindAsync둘 다 동일한 성능으로 비동기식 쿼리를 구축할 수 있습니다.
FindAsync모든 문서를 한 번에 로드하지 않는 커서를 반환하고 DB 커서에서 하나씩 문서를 검색할 수 있는 인터페이스를 제공합니다.쿼리 결과가 클 때 도움이 됩니다.
Find메소드를 통해 보다 간단한 구문을 제공ToListAsync여기서 내부는 커서에서 문서를 검색하고 모든 문서를 한 번에 반환합니다.
웹 요청에서 이 코드를 실행하고 찾기 방법을 호출하면 데이터베이스가 동기 호출을 반환할 때까지 요청 스레드가 동결됩니다. 완료하는 데 몇 초가 걸리는 긴 데이터베이스 작업인 경우,데이터베이스가 결과를 반환할 때까지 기다리지 않고 웹 요청을 처리할 수 있는 스레드 중 하나를 사용할 수 있으며 귀중한 리소스를 낭비합니다(스레드 풀의 스레드 수는 제한됨).
FindAsync를 사용하면 데이터베이스가 결과를 반환하기를 기다리는 동안 웹 요청 스레드가 비어 있습니다. 즉, 데이터베이스 호출 중에 이 스레드가 다른 웹 요청에 참석할 수 있습니다.데이터베이스가 결과를 반환하면 코드가 실행을 계속합니다.
파일 시스템의 읽기/쓰기, 데이터베이스 작업, 다른 서비스와의 통신과 같은 장시간 작업의 경우 비동기 호출을 사용하는 것이 좋습니다.결과를 기다리는 동안 스레드는 다른 웹 요청을 처리할 수 있습니다.이것은 더 확장 가능합니다.
이 마이크로소프트 기사 https://msdn.microsoft.com/en-us/magazine/dn802603.aspx 을 보십시오.
언급URL : https://stackoverflow.com/questions/30650722/difference-between-find-and-findasync
'programing' 카테고리의 다른 글
| asp.net 응용 프로그램에서 c#7 사용 (0) | 2023.06.24 |
|---|---|
| R: rJava 패키지 설치 실패 (0) | 2023.06.24 |
| "git diff tool"이 툴을 직접 열지 않는 이유는 무엇입니까? (0) | 2023.06.24 |
| 실행 취소 "git add"실행 취소 "git add"”? (0) | 2023.06.24 |
| 아파치 POI용 스칼라 래퍼가 있습니까? (0) | 2023.06.24 |