我尝试使用 AWS CloudWatch 库进行日志记录。 使用同步方法一切正常。但是,当我尝试使用相同方法的异步版本时,代码突然失败,没有抛出异常。这条线失败了:
await _amazonCloudWatchLogsClient.PutLogEventsAsync(request);
虽然这条线很好用:
_amazonCloudWatchLogsClient.PutLogEvents(request);
有趣的是,这条线也有效:
var result = _amazonCloudWatchLogsClient.PutLogEventsAsync(request).Result;
此时我不能想到回到同步方法之外的其他方法。同样,对于所有我尝试过的异步方法都是如此,而不是针对此特定方法。
答案 0 :(得分:1)
显然,在调用异步方法时必须小心。调用链中的一个问题将导致问题。在我的例子中,3个函数在堆栈中起作用,一个方法是异步的,返回值为void。
public async void LogBatchThroughput
我正在使用同步方法调用此方法,就像常规方法一样。这导致最后一个异步方法被调用(PutLogEventsAsync)失败,静默。 我将之前的方法签名更改为:
public async Task LogBatchThroughput
并通过.GetAwaiter()。GetResult()从同步方法调用它。
这解决了这个问题。该问题与AWS Cloudwatch库没有任何关系。