是否保证如果在关闭时使用WhenAll,方法的其余部分将执行?

时间:2018-06-11 17:20:33

标签: c# asynchronous service async-await

我有一个调度程序对象,当请求通过管道进入我的服务时,它处理任务的启动和关闭。

我的停止方法如下所示:

        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);
            }
        }
    }

My Instance.Shutdown Method如下:

    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完成执行,并且在该代码执行之前服务会关闭?

0 个答案:

没有答案