Estoy creando un intérprete y necesito crear una función en mi biblioteca estándar que ordene según un comparador definido por el usuario. Este comparador debe ser asíncrono, por lo que requiere que una función de clasificación en sí misma sea asíncrona (usando Task s).
¿Existe una función de clasificación .NET existente que permita Tareas en el comparador? Es decir, el comparador devuelve Task<int> y la función de clasificación completa Task y usa int para ordenar.
Por ejemplo, una versión de la List.Sort(IComparer<T> ) donde Compare(T,T) devolvió Task<int> en lugar de int .
(Estoy usando F # pero estoy feliz de usar bibliotecas C #)
Editar: imagine que el comparador necesita hacer un HTTP POST para comparar dos elementos.
Podría implementar una implementación de mergesort asíncrono que haría eso.
Y, de hecho, el artículo de Wikipedia sobre Mergesort en realidad analiza implementaciones paralelas.
El algoritmo básico es la simplicidad misma:
Si su lista es una lista enlazada, no se necesita memoria adicional, ya que el next punto proporciona todo lo que se necesita.
Si su lista es una construcción similar a una matriz, entonces tiene que consumir memoria adicional para crear matrices que funcionen para cada mitad, ya que una combinación en el lugar no es muy práctica.
Editado para tener en cuenta: aquí hay un pequeño documento de Microsoft sobre la implementación de un mergesort paralelo .Net con varias particiones, no solo 2: https://devblogs.microsoft.com/pfxteam/parallel-merge-sort-using-barrier/