使用任务作为字典键?

Gri*_*tem -3 c# dictionary task task-parallel-library

可以Task用作字典键还是一个坏主意?任何可能因此而出现的问题?

Ale*_*kov 5

任务没有它们自己,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");
Run Code Online (Sandbox Code Playgroud)