Я настраиваю приложение .net в контейнере Windows на основе Win2019 с каркасом .net 4.7.2.Я ищу способ корректно завершить работу контейнера, но до этого мое приложение выполнит некоторые задачи «в процессе» до остановки контейнера.Команда "docker stop" просто убивает контейнер.мое приложение основано на .net 4.7.2, а НЕ .Net Core.
это пример того, что я видел при использовании .Net Core:
private static readonly AutoResetEvent _closing = new AutoResetEvent(false);
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
AssemblyLoadContext.Default.Unloading += Default_Unloading;
Task.Factory.StartNew(() =>
{
while (true)
{
Console.WriteLine(DateTime.Now.ToString());
Thread.Sleep(1000);
}
});
Console.CancelKeyPress += new ConsoleCancelEventHandler(OnExit);
_closing.WaitOne();
}
private static void Default_Unloading(AssemblyLoadContext obj)
{
Console.WriteLine("unload");
}
private static void CurrentDomain_ProcessExit(object sender, EventArgs e)
{
Console.WriteLine("process exit");
}
protected static void OnExit(object sender, ConsoleCancelEventArgs args)
{
Console.WriteLine("Exit");
_closing.Set();
}
Так как AssemblyLoadContext поддерживаетсятолько в .Net Core я пытался использовать только вариант AppDomain, но безуспешно.Контейнер всегда отключен, и у него нет возможности контролировать его время и закрывать мои задачи «в процессе».