Advertisement
Guest User

Untitled

a guest
Nov 27th, 2014
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.08 KB | None | 0 0
  1. interface IFoo
  2. {
  3. Task<IEnumerable<Bar>> BarsAsync { get; }
  4. }
  5.  
  6. interface IFoo
  7. {
  8. IEnumerable<Bar> Bars { get; }
  9. }
  10.  
  11. internal class ExpensiveFoo : IFoo
  12. {
  13. private readonly Lazy<IEnumerable<Bar>> bars;
  14. public IEnumerable<Bar> Bars { get { return bars.Value; } }
  15. public ExpensiveFoo() { bars = new Lazy<IEnumerable<Bar>>(GetBars); }
  16. private IEnumerable<Bar> GetBars() { … /* some expensive computation */ }
  17. }
  18.  
  19. interface IFoo
  20. {
  21. Task<IEnumerable<Bar>> BarsAsync { get; }
  22. }
  23.  
  24. internal class ExpensiveFoo : IFoo
  25. {
  26. private Lazy<Task<IEnumerable<Bar>>> bars;
  27. public Task<IEnumerable<Bar>> BarsAsync { get { return bars.Value; } }
  28. public ExpensiveFoo() { bars = new Lazy<Task<IEnumerable<Bar>>>(GetBarsAsync); }
  29. private async Task<IEnumerable<Bar>> GetBarsAsync() { … };
  30. }
  31.  
  32. internal class CheapFoo : IFoo
  33. {
  34. public Task<IEnumerable<Bar>> BarsAsync { get { return Task.FromResult(bars) } }
  35. private IEnumerable<Bar> bars;
  36. public CheapFoo(IEnumerable<Bar> bars) { this.bars = bars; }
  37. }
  38.  
  39. Foo foo = …;
  40. foreach (Bar bar in await foo.BarsAsync) …
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement