3
我絕對是新來的線程,並試圖理解非常基礎。我得到這個代碼與異步委託調用:C#異步委託,線程調度
static void Main(string[] args)
{
Action<Thread, string> action = (mainThread, name) =>
{
Thread.CurrentThread.Name = name;
Thread.CurrentThread.IsBackground = false;
Console.WriteLine("Thread {0} starts", Thread.CurrentThread.Name);
while (true)
{
var input = Console.ReadLine();
Console.WriteLine("Thread {0} catches an input. User's input is: \"{1}\""
+"\nMain thread is alive = {2}",
Thread.CurrentThread.Name, input, mainThread.IsAlive);
}
};
action.BeginInvoke(Thread.CurrentThread,"First", null, null);
action.BeginInvoke(Thread.CurrentThread, "Second", null, null);
Thread.Sleep(2000);
}
而且無論我做什麼,輸出結果總是過得以下順序:第一 - >二線>第一 - >二線>首先...
據我瞭解,輸出順序應該是nondetermenistic。在這種情況下,它是。線程隊列如何處理?我錯過了什麼?請解釋一下
如果你想查詢的多線程儘量避免用戶輸入,我很漂亮,在Console.readline裏面有一個鎖,讓他們輪流。 – OopsUser
他們共享相同的控制檯。 –
但是爲什麼一個時間片中的一個線程不能執行兩次print-readline-print-readline? – user3101007