我已經在下面寫了一個示例程序。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