Асинхронный код, не завершающий дочерние потоки в AWS лямбда .net core 1.1 - PullRequest
0 голосов
/ 05 июня 2018

В настоящее время я запускаю свое приложение, используя лямбду AWS на .net core 1.1

. Я обнаружил, что при запуске описанного ниже метода конечный журнал указывает (_logger.Info ()) и все, что происходитвпоследствии код вызова не завершается.

Я намеренно оставил «ожидание» из точек журнала, так как я не хочу, чтобы приложение ждало, пока журнал не завершится, прежде чем перейти к следующему оператору, поскольку онивеб-вызовы в стороннюю службу ведения журнала, но я хочу, чтобы все потоки ведения журнала завершились до завершения всего процесса.

Если я поставлю «await» перед всеми _logger.Info, то все журналы будут запущеныдо завершения, что предполагает, что код работает, когда каждый метод ожидает выполнения последнего метода.

Это похоже на то, как если бы AWS Lambda говорила, что основной поток завершен, поэтому остановите весь процесс, даже если точки регистрации, которыесоздаются для запуска, поскольку асинхронизация еще не завершена.

Я провел некоторое исследованиеи убедитесь, что .net core 2.0 имеет транзакции (https://docs.microsoft.com/en-us/dotnet/api/system.transactions.transaction?view=netcore-2.0), но, по-видимому, это не поддерживается .net core 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");

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...