亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將線程數組轉換為任務并獲取名稱或任務 ID

將線程數組轉換為任務并獲取名稱或任務 ID

C#
SMILET 2022-11-21 22:15:10
我的代碼中有線程數組,我將用任務替換它們。 Dictionary<string, name> threadnames = new Dictionary<string, name>(); public Thread [] Threads; string[] nodeKeys; for (int i = 0; i < nodeKeys.Length; i++) {   Threads[i] = new Thread(() => ThreadMethod(nodeKey));   Threads[i].Name = nodeKey[i];   names.Add(Threads[i].Name, null);   Threads[i].Start(); }這是我將線程名稱保存在單獨字典中的舊方法?,F在我要把它轉換成任務到目前為止我所做的是這個 Dictionary<string, name> threadnames = new Dictionary<string, name>(); string[] nodeKeys; for (int i = 0; i < nodeKeys.Length; i++) {  var runningTask = new Task(() => ThreadMethod(nodeKey[i]));  runningTask.Start(); }現在既然都在 for 循環中,所有這些都應該在一個任務中完成嗎?或者,如果以上是正確的方法,我必須獲得的任務 ID 又如何呢?或者,如果有更好的方法,我們將不勝感激。
查看完整描述

1 回答

?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

ATask沒有名字的概念。但是由于您似乎在數組中創建了一個Taskper ,所以您可以將其用作鍵,前提是它是唯一的:stringnodeKeysstring


Dictionary<string, Task> tasks = new Dictionary<string, Task>();

string[] nodeKeys;


for (int i = 0; i<nodeKeys.Length; i++)

{

    tasks[nodeKey[i]] = Task.Run(() => ThreadMethod(nodeKey[i]));

}

另一種選擇可能只是按原樣添加任務,不帶任何標識符,到 aList<Task>或 a Task[]:


List<Task> tasks = new List<Task>();

string[] nodeKeys;


for (int i = 0; i<nodeKeys.Length; i++)

{

    tasks.Add(Task.Run(() => ThreadMethod(nodeKey[i])));

}

您可以使用Task.WhenAll方法等待一系列任務:


await Task.WhenAll(tasks.ToArray());

//or await Task.WhenAll(tasks.Values.ToArray());


查看完整回答
反對 回復 2022-11-21
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號