C# AmazonCloudWatchLogsClient异步方法失败,没有错误
我正在尝试使用AWS CloudWatch库进行日志记录。 使用同步方法,一切都很好。但是,当我尝试使用相同方法的async版本时,代码突然失败,没有抛出异常。这条线出现故障:C# AmazonCloudWatchLogsClient异步方法失败,没有错误,c#,.net,asynchronous,aws-sdk,amazon-cloudwatch,C#,.net,Asynchronous,Aws Sdk,Amazon Cloudwatch,我正在尝试使用AWS CloudWatch库进行日志记录。 使用同步方法,一切都很好。但是,当我尝试使用相同方法的async版本时,代码突然失败,没有抛出异常。这条线出现故障: await _amazonCloudWatchLogsClient.PutLogEventsAsync(request); 虽然这条线很好用: _amazonCloudWatchLogsClient.PutLogEvents(request); 有趣的是,这一行也适用: var result = _amazonClo
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库没有任何关系