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

将线程数组转换为任务并获取名称或任务 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贡献1562条经验 获得超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 关注
  • 9 浏览

添加回答

举报

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