我有一个调度程序对象,当请求通过管道进入我的服务时,它处理任务的启动和关闭。
我的停止方法如下所示:
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完成执行,并且在该代码执行之前服务会关闭?