温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Use Task as dictionary key?
c# dictionary task task-parallel-library

c# - 使用Task作为字典键?

发布于 2020-04-23 10:30:13

可以Task用作字典键吗?还是一个坏主意?可能会因此而发生任何问题?

查看更多

提问者
Grigoryants Artem
被浏览
47
Alexei Levenkov 2020-02-06 14:49

任务没有它们自己GetHashCode,是直接从派生的引用类型Object结果GetHashCode/ Equals不会随对象的状态而变化,而仅取决于对象的引用(GetHashCode)。

结果Task可以用作字典的键,并允许从任务到数据进行快速查找。匹配项将位于精确的对象上。

常用用法-通过运行任务的代码将一些数据与正在运行的任务相关联,即记录ID:

 Task task1 = Task.Delay(100);
 Task[] allTasks = new[]{task1}; 

 var dictionary = new Dictionary<Task, string> { {task1, "first-task"}};

 Task completed = await Task.WhenAny(allTasks);
 Console.WriteLine($"Task {dictionary[completed]} finished");