2017-11-28 4 views
1

이것은 ToDo 샘플 프로젝트 Cosmos DB ToDo App을 기반으로 개발중인 클래스 라이브러리에 있으며 CosmosDB에서 "CRUD"작업을 수행합니다. 그러나이 메서드를 호출 할 때마다 앱이 갑자기 멈추고 오류가 발생하지 않습니다.Azure CosmosDB SDK ExecuteNextAsync <T> 오류

다음은 내가 읽기를 수행하는 데 사용하는 코드입니다. 현재 주석 처리되지 않은 코드는 데이터베이스에서 읽는 데 문제가없는 동기식 호출입니다.

public static async Task<IEnumerable<T>> GetItemsAsync<T, E>(Expression<Func<T, bool>> predicate) where T : DocDbEntity<E> where E : class 
    { 
     string documentType = typeof(E).Name; 
     IQueryable<T> query = _client.CreateDocumentQuery<T>(
      UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId)) 
      .Where(predicate) 
      .Where(x => x.DocumentType == documentType); 

     List<T> results = new List<T>(); 
     foreach (var res in query) 
     { 
      results.Add(res); 
     } 

     //IDocumentQuery<T> query = _client.CreateDocumentQuery<T>(
     // UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId)) 
     // .Where(predicate) 
     // .Where(x => x.DocumentType == documentType) 
     // .AsDocumentQuery(); 

     //while (query.HasMoreResults) 
     //{ 
     // results.AddRange(await query.ExecuteNextAsync<T>()); 
     //} 

     return results; 
    } 

나는 즉시 오류를 제공하거나 문제를 일으키는 원인이 될 수 없으며 검색된 데이터 요청에 "응답"무슨 가리키는없이 종료됩니다 query.ExecuteNextAsync<T>() 내 응용 프로그램을 사용하려고 할 때마다. 샘플 앱에 문제가없는 것 같습니다.

나는 버전이 문제의 원인이 무엇 1.19.1

@ NuGet에서 Microsoft.Azure.DocumentDB 패키지를 사용하고 있습니다?

답변

0

실제 문제는 어떤 식 으로든 ExecuteNextAsync와 관련이 없지만이 메서드를 호출 한 함수가 void을 반환했기 때문에 부모 호출자가 응답을 기다리는 것을 방지합니다. 작업을 반환하기 시작하면 모든 것이 예상대로 작동하기 시작했습니다.

+1

이 이유는'async void' 함수가'await'를 사용할 수 있기 때문이며, 첫 번째'await'까지 동 기적으로 실행되고 즉시 (대리자 핸들러와 함께) 반환됩니다. 이것은 당신이'await'을 가지고있다하더라도, 당신의 델리게이트 처리기가 사라졌고, 첫 번째'await' 후에 그 메소드로 돌아갈 수있는 능력도 있다는 것을 의미합니다. – ethane