需要語法幫助,有沒有什么方法可以在一個陳述句中呼叫多個實體的相同方法,比如我們為多個變數賦值的方式?
var t1 = new Thread(SayHello);
var t2 = new Thread(SayBye);
var t3 = new Thread(SayGoodbye);
(t1.Name, t2.Name, t3.Name) = ("Thread1", "Thread2", "Thread3");
// any way to call t1,t2, and t3's Start Method in one statement like above
t1.Start();
t2.Start();
t3.Start();
uj5u.com熱心網友回復:
您不能在一個陳述句中呼叫多個物件的 Start() 方法,因為您會在一個陳述句中為多個變數分配相同的值: Start() 方法是每個物件中的一個元素,而不是附加到的同一段代碼每一個。 最接近你能來的是IamK的評論
(new List<Thread> { t1, t2, t3 }).ForEach(_=> _.Start());
這是一個有效的結構,而不是我想到的僅僅是概念上的結構
(t1, t2, t3).Start();
uj5u.com熱心網友回復:
要讓所有執行緒從一行開始,只需洗掉 and 之后的換行符t1.Start();(t2.Start();開玩笑)。
我假設,您想同時啟動所有執行緒(低至一納秒)。這是不可能的——因為不可能同時分配多個變數。分配執行緒名稱的那一行(通過 a Tuple)只是 ac# 語法糖。它會導致多個陳述句,例如在Sharp Lab上可以看到(我已經鏈接了一個示例)。
uj5u.com熱心網友回復:
你可以像這樣開始你的執行緒:
(t1, t2, t3).Start();
...但為了做到這一點,你必須在你的專案中包含這個擴展方法:
public static void Start(this (Thread, Thread, Thread) tuple)
{
ArgumentNullException.ThrowIfNull(tuple.Item1);
ArgumentNullException.ThrowIfNull(tuple.Item2);
ArgumentNullException.ThrowIfNull(tuple.Item3);
tuple.Item1.Start();
tuple.Item2.Start();
tuple.Item3.Start();
}
顯然這是不切實際的。如果您有四個執行緒,則必須添加另一個帶有四個引數的擴展方法,如果您有其他帶有Start方法的類,則必須為該類撰寫另一組擴展方法等。長話短說目前的 C# 語言(C# 10)不能自動為你做這件事。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/517030.html
標籤:C#多线程句法元组代表
