在C#中,实现优雅停机的关键在于使用CancellationToken
和CancellationTokenSource
来通知应用程序需要停止执行。以下是一个简单的示例,展示了如何在C#中实现优雅关机:
CancellationTokenSource
实例,用于发送停止信号:CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken
传递给需要停止执行的方法:public void YourLongRunningMethod(CancellationToken cancellationToken)
{
for (int i = 0; i < 10; i++)
{
cancellationToken.ThrowIfCancellationRequested();
// 执行你的业务逻辑
Console.WriteLine("Working...");
// 模拟耗时操作
Thread.Sleep(1000);
}
}
Cancel
方法:public void StopApplication()
{
cancellationTokenSource.Cancel();
}
Main
方法)中,监听CancellationToken
的取消事件:public static void Main(string[] args)
{
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
CancellationToken cancellationToken = cancellationTokenSource.Token;
// 启动一个新线程执行长时间运行的方法
Thread thread = new Thread(() =>
{
YourLongRunningMethod(cancellationToken);
});
thread.Start();
// 模拟用户按下Ctrl+C或其他停止信号
Console.WriteLine("Press any key to stop the application...");
Console.ReadKey();
// 停止应用程序
StopApplication();
// 等待线程结束
thread.Join();
}
当用户按下Ctrl+C或其他停止信号时,StopApplication
方法会被调用,从而触发CancellationToken
的取消事件。YourLongRunningMethod
方法会检查CancellationToken
是否已请求取消,如果是,则抛出OperationCanceledException
异常。在主方法中,你可以捕获这个异常并执行关闭操作,例如释放资源、关闭连接等。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。