gpt4 book ai didi

C# 线程模式 - 这是个好主意吗?

转载 作者:行者123 更新时间:2023-11-30 13:14:07 25 4
gpt4 key购买 nike

我今天在玩我的一个项目时发现了一个有趣的小片段,给定以下模式,您可以安全地清理一个线程,即使它被迫提前关闭。我的项目是一个网络服务器,它为每个客户端生成一个新线程。我发现这对于从远程端提前终止很有用,但对于本地端也很有用(我可以从我的处理代码中调用 .Abort())。

您是否可以看到任何问题,或者您对任何正在研究类似方法的人有什么建议?

测试用例如下:


using System;
using System.Threading;

class Program
{
static Thread t1 = new Thread(thread1);
static Thread t2 = new Thread(thread2);

public static void Main(string[] args)
{
t1.Start();
t2.Start();
t1.Join();
}

public static void thread1() {
try {
// Do our work here, for this test just look busy.
while(true) {
Thread.Sleep(100);
}
} finally {
Console.WriteLine("We're exiting thread1 cleanly.\n");
// Do any cleanup that might be needed here.
}
}

public static void thread2() {
Thread.Sleep(500);
t1.Abort();
}
}

作为引用,如果没有 try/finally block ,线程就会像预期的那样死掉。

最佳答案

除非整个应用程序都崩溃,否则完全中止另一个线程只是一个坏主意。很容易让您的程序处于未知状态。中止您的自己的线程偶尔有用 - 例如,如果您想提前结束响应,ASP.NET 会抛出 ThreadAbortException - 但这不是一个非常好的设计。

线程的安全清理应该是相互的——应该有一些共享标志请求线程关闭。线程应定期检查该标志并适当退出。

关于C# 线程模式 - 这是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com