可以Task
用作字典键吗?还是一个坏主意?可能会因此而发生任何问题?
任务没有它们自己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");