将线程数组转换为任务并获取名称或任务 ID

我的代码中有线程数组,我将用任务替换它们。


 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();

 }

这是我将线程名称保存在单独字典中的旧方法。现在我要把它转换成任务到目前为止我所做的是这个


 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 又如何呢?


或者,如果有更好的方法,我们将不胜感激。


SMILET
浏览 121回答 1
1回答

偶然的你

ATask没有名字的概念。但是由于您似乎在数组中创建了一个Taskper ,所以您可以将其用作键,前提是它是唯一的:stringnodeKeysstringDictionary<string, Task> tasks = new Dictionary<string, Task>();string[] nodeKeys;for (int i = 0; i<nodeKeys.Length; i++){&nbsp; &nbsp; 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++){&nbsp; &nbsp; tasks.Add(Task.Run(() => ThreadMethod(nodeKey[i])));}您可以使用Task.WhenAll方法等待一系列任务:await Task.WhenAll(tasks.ToArray());//or await Task.WhenAll(tasks.Values.ToArray());
打开App,查看更多内容
随时随地看视频慕课网APP