3 回答

TA貢獻1865條經驗 獲得超7個贊
沒有技術原因async在C#中不允許使用屬性。這是一個有目的的設計決策,因為“異步屬性”是矛盾的。
屬性應返回當前值; 他們不應該開始背景操作。
通常,當有人想要“異步屬性”時,他們真正想要的是以下之一:
一種返回值的異步方法。在這種情況下,將屬性更改為async方法。
可以在數據綁定中使用但必須異步計算/檢索的值。在這種情況下,要么使用async工廠方法來包含對象,要么使用async InitAsync()方法。數據綁定值將default(T)一直到計算/檢索該值。
一個創建起來很昂貴的值,但應該緩存以供將來使用。在這種情況下,請使用AsyncLazy 我的博客或AsyncEx庫。這將為您提供一個有await能力的財產。
更新:我在我最近的一篇“異步OOP”博客文章中介紹了異步屬性。

TA貢獻1873條經驗 獲得超9個贊
您不能異步調用它,因為沒有異步屬性支持,只有異步方法。因此,有兩個選項,都利用了CTP中的異步方法實際上只是一個返回的方法Task<T>或Task:
// Make the property return a Task<T>
public Task<IEnumerable> MyList
{
get
{
// Just call the method
return MyAsyncMethod();
}
}
要么:
// Make the property blocking
public IEnumerable MyList
{
get
{
// Block via .Result
return MyAsyncMethod().Result;
}
}
- 3 回答
- 0 關注
- 853 瀏覽
添加回答
舉報