我的代码中有线程数组,我将用任务替换它们。 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 又如何呢?或者,如果有更好的方法,我们将不胜感激。
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 关注
- 118 浏览
添加回答
举报
0/150
提交
取消