Гарантируется ли, что остальная часть метода будет выполняться после WhenAll, если она используется при завершении работы? - PullRequest
0 голосов
/ 11 июня 2018

У меня есть объект диспетчера, который обрабатывает запуск и завершение задач, когда запросы поступают в мой сервис через канал.

Мой метод при остановке выглядит следующим образом:

        protected override void OnStop()
    {
        try
        {
            Task t = CalculationServiceProcess.Instance.Shutdown();
            t.Wait();
        }
        catch (AggregateException ae)
        {
            foreach (Exception e in ae.InnerExceptions)
            {
                Debug.WriteLine(e.Message);
            }
        }
    }

Мой метод Instance.Shutdown выглядит следующим образом:

    public Task Shutdown()
    {
        _shutdownTokenSource.Cancel();
        Task t = _dispatcher.Shutdown();
        _shutdownTokenSource.Dispose();
        ///some more code
        return t;
    }

А метод отключения диспетчеров выглядит следующим образом:

      public Task Shutdown()
    {
        Task t = Task.WhenAll(_dispatchedItems.Select((item => item.Value.Task)).ToArray());
        _dispatchedItems.Clear();
        return t;
    }

Интересно, будет ли вызван метод dispose и будет ли гарантированно выполняться «// еще какой-то код»?Или когда задание WhenAll завершится, мой метод t.Wait () вернется и OnStop завершит выполнение, а служба будет закрыта до выполнения этого кода?

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