У меня есть метод, который возвращает задачу, для реализации которой может потребоваться или не понадобиться выполнить медленную операцию, чтобы получить результат. Я хотел бы просто обвести значение результата в задачу, которая помечена как синхронно завершена в случае, когда значение уже доступно. Сегодня у меня есть что-то вроде этого:
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());
}
}
}
Существует ли более простой способ сделать это, что не требует от меня задания задачи с делегатом, когда я уже знаю результат?