好吧,在不知道 XTThreadPool 类中有什么的情况下,这有点棘手,但你可以猜到......
机会是,这第一点...
taskWrapper = XTThreadPool.DEFAULT_POOL.Run((System.Threading.ThreadStart)delegate()
{
//Remote procedure execution and result processing code.
//Some vars set in here are used after the Join() below.
}, true, true);
...启动一个异步运行的线程并传递在您放置注释的部分中指定的方法。这可能是通过创建一个Thread的实例来实现的,将方法作为委托传递给它的构造函数,然后调用newThread.Start()
,它开始在应用程序线程池中的新线程上执行。然后可以使用线程引用来检查该线程的状态并查看它是否已完成,这可能是本节所做的:
while (taskWrapper.Status == XTThreadPool.Task.STATUS.None)
{
System.Threading.Thread.Sleep(10);
}
这对我来说似乎有点奇怪。System.Threading.Thread
访问的是当前线程,而不是线程池启动的线程,Sleep 方法只是表示“什么都不做”。所以当前线程正在等待taskWrapper实例启动的线程进入None以外的状态。现在这是变得困难的地方,因为我们真的不知道 taskWrapper 在做什么。
实际上它可能只是在等待线程完成执行,但是没有单独的线程是没有意义的,因为这项工作也可以代替上面的 while 循环来完成。
然后这个:
taskWrapper.Join();
上面的行真的可以做任何事情,就像我说的那样,它取决于 taskWrapper 的实现。但根据名称,我猜它使用Thread.Join方法,该方法基本上会导致调用线程(此线程)等待它调用的线程(taskWrapper)完成。然而 taskWrapper 本身实际上并不是一个线程(基于对上述 Status 属性值的检查),更有可能它只是线程的一个包装器。
老实说,我已经完全猜到了,它真的可以做任何事情。如果没有看到 XTThreadPool 类的代码以及任何 DEFAULT_POOL 是它的实例,就不可能确定发生了什么。
在第一次检查时,如果代码正在执行我在上面猜到的操作,那么没有另一个线程来完成工作,也没有必要使用 while 循环!整个事情可以替换为调用 Run 中方法中的任何内容。