代码之家  ›  专栏  ›  技术社区  ›  weismat

程序端多线程清理策略

  •  5
  • weismat  · 技术社区  · 16 年前

    以干净的方式完成多线程应用程序的最佳方法是什么?
    我开始几个插座连接从主线程在不同的插座和等待,直到我的工作日结束在主线程和当前使用 System.Environment.Exit(0) 终止它。

    这将导致其中一个child中出现未处理的异常。我应该停止列表中的线程吗?我一直不愿意在childs实现任何真正的停止,因此我想知道最佳实践。所有的套接字都用合适的析构函数很好地包装起来,用于注销和关闭,但是仍然会导致错误。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Sergey Teplyakov    16 年前

    对于手动创建的螺纹,应设置 IsBackground 属性设置为true。在这种情况下(如果除main线程外的所有线程都是后台线程),则在从main(string[]arg)函数返回后,应用程序将正常关闭。

    注意:所有线程池线程都是后台线程。

        2
  •  4
  •   stmax    16 年前

    请看jon skeet关于多线程的文章:

    http://www.yoda.arachsys.com/csharp/threads/

    尤其是“优雅地关闭工作线程”:

    http://www.yoda.arachsys.com/csharp/threads/shutdown.shtml

        3
  •  0
  •   Robert Davis    16 年前

    例子:

    // exit is a ManualResetEvent
    var asyncResult = socket.BeginAccept(null, null);
    if(WaitHandle.WaitAny(new[] { exit, asyncResult.AsyncWaitHandle }) == 0)
       return;
    var connection = socket.EndAccept(asyncResult);
    

    当你想退出时,你的主要方法是:

    exit.Set();
    
    推荐文章