2017-10-19 99 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库没有任何关系。