我的代碼中有線程數組,我將用任務替換它們。 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());
- 1 回答
- 0 關注
- 142 瀏覽
添加回答
舉報
0/150
提交
取消