那么它不知道什么是在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是否是实例,都无法确切知道发生了什么。
在第一次检查时,if该代码正在做我以上猜测的结果,没有意义让另一个线程来完成这项工作,没有任何一点有while循环!整个事情可以用Run中调用的方法中的任何东西来代替。
也只是猜测在这里,但等待状态不是'无'可能意味着等待,直到任务实际开始(即它已被安排到一个底层线程)。 –
非常感谢您的帮助:)我相信你是对的,这可能是在原始线程中完成的。 +1 :) –