为了账号安全,请及时绑定邮箱和手机立即绑定

将线程数组转换为任务并获取名称或任务 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(); }这是我将线程名称保存在单独字典中的旧方法。现在我要把它转换成任务到目前为止我所做的是这个 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 关注
  • 118 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信