我目前正在使用.net核心1.1上的AWS lambda运行我的应用程序
我发现当我运行下面的方法时,最终的日志点(_logger.Info())以及之后在调用代码中发生的任何事情都没有完成。
我故意将“await”从日志点中删除,因为我不希望应用程序等到日志完成后再转到下一个语句,因为它们是对第三方日志服务的Web调用,但是我做了希望在整个过程完成之前完成所有日志记录线程。
如果我在所有_logger.Info之前放置“await”,那么所有日志都会运行完成,这表明当每个方法等待执行最后一个方法时代码都能正常工作。
就好像AWS Lambda说主线程已完成因此,即使生成为异步运行的日志记录点尚未完成,也会停止整个过程。
我做了一些研究,发现.net core 2.0有交易(https://docs.microsoft.com/en-us/dotnet/api/system.transactions.transaction?view=netcore-2.0),但这似乎不受.net核心1.1支持
有没有办法让AWS Lambda等到所有生成的线程在完成之前成功完成?如果是这样,你能给我一个例子吗?
这里有其他事情我误解了吗?
以下是代码:
private async Task LoadExhibitor(JObject input)
{
// Retrieve Data
_logger.Info("Retrieving Data");
// Set some variables
....
if (rawExhibitor.Error != null)
{
_logger.Warn($"No exhibitor returned from ...");
// Some error handling
...
return;
}
// Transform some information to another object
_logger.Info("Transforming exhibitor to a friendly object");
var exhibitor = await someTransformer.Transform(rawExhibitor)
_logger.Info($"Saving to elastic search ...");
// Save
await repository.SaveAsync(exhibitor, eventEditionId, locale, sessionId);
_logger.Info($"Saving to elastic search has completed");
}