There is no technical reason that async properties are not allowed in C#. It was a purposeful design decision, because “asynchronous properties” is an oxymoron.
Properties should return current values; they should not be kicking off background operations.
Usually, when someone wants an “asynchronous property”, what they really want is one of these:
- An asynchronous method that returns a value. In this case, change the property to an
asyncmethod. - A value that can be used in data-binding but must be calculated/retrieved asynchronously. In this case, either use an
asyncfactory method for the containing object or use anasync InitAsync()method. The data-bound value will bedefault(T)until the value is calculated/retrieved. - A value that is expensive to create, but should be cached for future use. In this case, use
AsyncLazyfrom my blog or AsyncEx library. This will give you anawaitable property.
Update: I cover asynchronous properties in one of my recent “async OOP” blog posts.