Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C#

C# เทียบเท่า Java System.exit(0) - Environment.Exit

Java ใช้ `System.exit(0)` หยุด JVM ทันที ใน C# ใช้ Environment.Exit()

Basic Usage

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Starting...");

        // จบโปรแกรมทันที คืน Exit Code 0 (Success)
        Environment.Exit(0);

        Console.WriteLine("This won't print");
    }
}

Exit Codes มาตรฐาน

Exit Codeความหมายใช้เมื่อไหร่
0Successโปรแกรมทำงานเสร็จสมบูรณ์
1General ErrorError ไม่เฉพาะเจาะจง
2File Not Found / Invalid FormatConfig ไม่พบ, Input ไม่ถูกต้อง
3-127Application Specificกำหนดเองตาม Domain
128+Signal/OS SpecificUnix Signals (SIGTERM=143, etc.)

ตัวอย่าง: Exit Codes แบบมีความหมาย


public class Program
{
    public static int Main(string[] args)
    {
        try
        {
            if (args.Length == 0)
            {
                Console.Error.WriteLine("Error: No input file specified");
                return 2; // Invalid Arguments
            }

            string filePath = args[0];
            if (!File.Exists(filePath))
            {
                Console.Error.WriteLine($"Error: File not found: {filePath}");
                return 3; // File Not Found
            }

            var content = File.ReadAllText(filePath);
            ProcessContent(content);

            return 0; // Success
        }
        catch (UnauthorizedAccessException)
        {
            Console.Error.WriteLine("Error: Permission denied");
            return 4; // Permission Denied
        }
        catch (Exception ex)
        {
            Console.Error.WriteLine($"Error: {ex.Message}");
            return 1; // General Error
        }
    }

    static void ProcessContent(string content) { }
}

Environment.Exit vs Return from Main

ด้านEnvironment.Exit(code)Return from Main
Scopeจบ Process ทันที (ทุก Thread)จบ Main Thread เท่านั้น
Finally Blocksไม่รัน (Process Terminated)รันปกติ
Destructors/Finalizersไม่รันรัน (ใน GC)
Static Constructorsไม่รันสำหรับ Types ที่ยังไม่ Loadรันปกติ
ใช้เมื่อCritical Error, Hosted EnvironmentNormal Exit

⚠️ ข้อควรระวัง

  • Environment.Exit() เรียก ExitProcess (Windows) / _exit (Unix) - ไม่รัน Finally/Using/Dispose
  • ใน ASP.NET Core / Generic Host: ควรใช้ IHostApplicationLifetime.StopApplication() แทน
  • ใน WPF/WinForms: ควรใช้ Application.Shutdown()
  • Unit Test: อย่าใช้ Environment.Exit (จะ Kill Test Runner) ใช้ Return Code หรือ Throw Exception

Graceful Shutdown Pattern


public class App
{
    private readonly IHost _host;

    public async Task RunAsync(string[] args)
    {
        try
        {
            await _host.StartAsync();
            await _host.WaitForShutdownAsync();
        }
        finally
        {
            await _host.StopAsync(TimeSpan.FromSeconds(30));
        }
    }
}