none
线程,异步,把我搞糊涂了 RRS feed

  • 问题

  • 我在写一个网络通信的服务器端程序,我采用的异步TcpListener

    另外我主线程里用Thread类开了一个线程,就叫做线程1吧,用异步TcpListener时,电脑会为每个连接在线程池创建一个

    线程吧?假设有两个客户端连接到我的服务器端,假设分别创建了线程2和线程3吧。

    我是想让线程1处理一些事情之后等待,这时候让线程2和线程3处理一些事情,在线程2和线程3的事情都处理完毕之后(必须都处理完),让线程1停止等待,继续执行。

    应该用什么实现呢?

    • 已移动 Sheng Jiang 蒋晟Moderator 2009年3月21日 15:41 .Net基础类库问题 (从 Visual C# 移动到 .NET Framework 一般性问题讨论区)
    2009年3月21日 13:03

答案

  • 你好!
         我想了一个思路,你试试是否可行:
         线程池里的线程我们很难控制,但是异步调用是可以指定回调函数的(那个开始异步调用的方法里面有这个参数),当异步调用结束的时候调用这个函数!你可以在这个函数里使用事件机制来通知主线程来结束等待,这里的事件是指AutoResetEvent实例 ,这个机制你应该比较熟悉了!
         希望对你有帮助!

    周雪峰
    2009年3月21日 14:47
    版主
  • 楼主,你好

    异步通信和多线程请参考下面的链接。

    C#.net同步异步SOCKET通讯和多线程总结(转载)


    Microsoft Online Community Support
    2009年3月24日 5:47

全部回复

  • 你好!
         我想了一个思路,你试试是否可行:
         线程池里的线程我们很难控制,但是异步调用是可以指定回调函数的(那个开始异步调用的方法里面有这个参数),当异步调用结束的时候调用这个函数!你可以在这个函数里使用事件机制来通知主线程来结束等待,这里的事件是指AutoResetEvent实例 ,这个机制你应该比较熟悉了!
         希望对你有帮助!

    周雪峰
    2009年3月21日 14:47
    版主
  •  其实我就是这么想的,只是没有做通 啊!呵呵

    2009年3月22日 3:02
  • 楼主,你好

    异步通信和多线程请参考下面的链接。

    C#.net同步异步SOCKET通讯和多线程总结(转载)


    Microsoft Online Community Support
    2009年3月24日 5:47