AmazonCloudWatchLogsClient异步方法失败,无错误
问题描述:
我正在尝试使用AWS CloudWatch库进行日志记录。 一切工作正常与同步方法。但是,当我尝试使用相同方法的异步版本时,代码突然失败,没有发生任何异常。这片线的失败:AmazonCloudWatchLogsClient异步方法失败,无错误
await _amazonCloudWatchLogsClient.PutLogEventsAsync(request);
虽然该行正常工作:
_amazonCloudWatchLogsClient.PutLogEvents(request);
有趣的是,这条线的工作原理,以及:
var result = _amazonCloudWatchLogsClient.PutLogEventsAsync(request).Result;
在这一点上,我想不出除了回到同步方法之外的其他方法。再次,这是所有我试过的异步方法,而不是这个特定的方法。
答
显然,调用异步方法时必须小心。调用链中的一个问题会导致问题。在我的情况下,3个函数在堆栈中运行,一个方法是异步的,返回值为void。
public async void LogBatchThroughput
我从一个同步方法调用这个方法就像一个常规方法。这导致最后的异步方法被静默地调用(PutLogEventsAsync)失败。 我改变了以往方法的签名是:
public async Task LogBatchThroughput
和由.GetAwaiter称之为()调用getResult(),从同步方法。
这解决了这个问题。这个问题与AWS Cloudwatch库没有任何关系。