programing

동기화 찾기와 동기화 찾기의 차이점

jooyons 2023. 6. 24. 09:01
반응형

동기화 찾기와 동기화 찾기의 차이점

저는 매우 간단한 쿼리를 작성하고 있습니다. 컬렉션에서 고유 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

반응형