2017-10-19 13 views
2

로깅을 위해 AWS CloudWatch 라이브러리를 사용하려고합니다. 모든 것이 동기식 방법으로 잘 작동합니다. 그러나 비동기 버전의 동일한 메서드를 사용하려고하면 예외가 발생하지 않고 코드가 갑자기 실패합니다. 라인이 조각 실패AmazonCloudWatchLogsClient 비동기 메서드가 오류없이 실패합니다

await _amazonCloudWatchLogsClient.PutLogEventsAsync(request); 

이 줄은 잘 작동하는 동안 : 흥미롭게도

_amazonCloudWatchLogsClient.PutLogEvents(request); 

,이 라인은 잘 작동 :

var result = _amazonCloudWatchLogsClient.PutLogEventsAsync(request).Result; 

을 내가 생각할 수없는이 시점에서 동기 방법으로 돌아가는 것 이외의 방법. 다시 말하지만, 이것은 모두에 해당합니다.이 특정 메서드가 아니라 비동기 메서드입니다.

답변

1

비동기 메서드를 호출하는 동안 조심해야합니다. 호출 체인에서 한 가지 문제가 발생합니다. 제 경우에는 3 개의 함수가 스택에 올랐습니다. 메소드는 void의 리턴 값을 가진 비동기였습니다.

public async void LogBatchThroughput 

이 메서드는 동기 메서드에서 일반 메서드처럼 호출하고있었습니다. 이로 인해 마지막 비동기 메서드 (PutLogEventsAsync)가 자동으로 실패하도록 호출되었습니다. 나는 것으로 이전 메소드 서명을 변경 :

public async Task LogBatchThroughput 

및 .GetAwaiter하여 호출() getResult를()에서 동기 방법..

이 문제가 해결되었습니다. 이 문제는 AWS Cloudwatch 라이브러리와 관련이 없습니다.