このように.NET Core/.NET 5以降ではファイナライザの実行が保証されない場合があるため、代替手段としてAssemblyLoadContext.Unloadingイベントが追加されています。 実装したい終了処理がクリティカルな場合は、このイベントを捕捉し、そこで終了処理を行うようにする必要があります。 特に、プロセス終了とともに自動的に解放されないようなリソースを扱う場合は、ファイナライザではなくAssemblyLoadContext.Unloadingイベントで解放処理を行う必要があります。
AssemblyLoadContext.Unloadingイベントを捕捉して終了処理を行う .NET Standard 1.6/.NET Core 2.0
Imports System
Imports System.Runtime.Loader
Class Sample
Shared Sub Main()
' AssemblyLoadContext.Unloadingイベントで必要な終了処理を行う
AddHandler AssemblyLoadContext.GetLoadContext(GetType(Sample).Assembly).Unloading, Sub(ByVal ctx As AssemblyLoadContext)
Console.WriteLine("unload")
End Sub
Console.WriteLine("end")
End Sub
End Class