Tôi có một phương thức trả về một Tác vụ trong đó việc thực hiện có thể hoặc không cần thực hiện thao tác chậm để truy xuất kết quả. Tôi muốn có thể chỉ cần bọc giá trị kết quả vào một Tác vụ được đánh dấu là đã hoàn thành đồng bộ trong trường hợp giá trị đã có sẵn. Hôm nay tôi có một cái gì đó như thế này:Tạo một trình bao bọc nhiệm vụ xung quanh một đối tượng hiện có
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());
}
}
}
Có cách nào đơn giản hơn để làm điều này mà không yêu cầu tôi phải xây dựng nhiệm vụ với đại biểu khi tôi đã biết kết quả?