异步代码未在AWS lambda .net核心1.1

时间:2018-06-05 15:24:38

标签: c# multithreading amazon-web-services aws-lambda .net-core-1.1

我目前正在使用.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");

    }

0 个答案:

没有答案