thread startnew start method continuewith async c# task

method - task startnew c#



¿Por qué es ambigua la llamada? ''Task.Run(Action)'' y ''Task.Run(Func<Task>)'' (1)

Debería estar claro, pero la especificación del idioma nunca dijo que los tipos de retorno no coincidentes tendrían ningún efecto durante la resolución de sobrecarga. Debido a eso, no había ninguna regla que dijera que preferiría Action sobre Func<Task> . Si se escogiera Action , seguro, funcionaría. Si se seleccionara Func<Task> , entonces seguro, obtendrías un error. Pero para elegir cualquiera de los dos, la resolución de sobrecarga tiene que tener éxito, y no tiene esto en cuenta.

Se supone que esto se solucionará con la nueva resolución de sobrecarga en C # 7.3 .

Teniendo en cuenta el siguiente código:

public void CacheData() { Task.Run((Action)CacheExternalData); Task.Run(() => CacheExternalData()); Task.Run(CacheExternalDataTask); Task.Run(CacheExternalData); } public Task CacheExternalDataTask() { // Long running code return Task.FromResult("Data"); } public void CacheExternalData() { // Long running code }

¿Por qué es Task.Run(CacheExternalData) ? ¿Y Task.Run(CacheExternalDataTask) no lo es?

Al llamar a Task.Run con CacheExternalData , pensé que estaba claro para el compilador que el método no devuelve una Task y que debería resolverse en una Action .