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