我已经在下面写了一个示例程序。ThreadPool.QueueUserWorkItem和异步编程
class Program
{
static int x = 2;
static void Main(string[] args)
{
Console.WriteLine("Thread ID {0} and Main Called!", Thread.CurrentThread.ManagedThreadId);
ThreadPool.QueueUserWorkItem(Count, args);
ThreadPool.QueueUserWorkItem(Count2, args);
Console.WriteLine("Thread ID {0} and Main Done!", Thread.CurrentThread.ManagedThreadId);
Console.ReadLine();
}
static void Count(object args)
{
for (int i = 0; i < 10; i++)
{
x = x + 2;
Console.WriteLine("Thread ID {0} AND Count 1: " + x, Thread.CurrentThread.ManagedThreadId);
}
}
static void Count2(object args)
{
for (int i = 0; i < 10; i++)
{
x = x + 2;
Console.WriteLine("Thread ID {0} AND Count 2: " + x, Thread.CurrentThread.ManagedThreadId);
}
}
}
当调用使用ThreadPool.QueueUserWorkItem的计数方法,我注意到计数方法完成,共2个记录方法被纠结了计数法之前主要完成。
Main(和Count2)有没有等到Count方法完成后?我不想使用锁或Thread.Sleep(因为我不知道Count操作需要多长时间)。我在某处读过异步呼叫,或者在这段时间使用WAIT。
任何想法?
如果Count2必须在Count之后发生,为什么将它们排队为单独项目? – 2010-09-17 04:05:05
什么是替代方案?你会如何排队呢? – Mage 2010-09-17 04:06:48