使用任务作为字典键?
Use Task as dictionary key?
可以使用 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");
可以使用 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");