Tengo un método que devuelve una Tarea donde la implementación puede o no necesitar realizar una operación lenta para recuperar el resultado. Me gustaría poder simplemente ajustar el valor del resultado en una Tarea que está marcada como completada sincrónicamente en el caso en que el valor ya esté disponible. Hoy tengo algo como esto:Crear un contenedor de tareas alrededor de un objeto existente
public Task<Foo> GetFooAsync(int key) {
lock(this) {
if(_Cache.ContainsKey(key)) {
Task<Foo> ret = new Task<Foo>(()=>_Cache[key]);
ret.RunSynchronously();
return ret;
}
else {
return Task.Factory.StartNew<Foo>(SomethingSlow());
}
}
}
es que no hay manera más sencilla de hacer esto que no me requiere para construir la tarea con un delegado cuando ya sé el resultado?