jbk*_*kkd 14 .net c# async-await c#-5.0
可能重复:
如何从getter或setter调用异步方法?
我正在尝试实现一个在其中使用Sqlite等待的属性:
public int ID {
get
{
if (_id != null)
{
return _id;
}
if (string.IsNullOrEmpty(ImageName))
{
return -1;
}
var query = CurrentConnection.Table<Image>().Where(i => i.ImageName == ImageName);
var result = await query.ToListAsync();
...other code
Run Code Online (Sandbox Code Playgroud)
但是,由于属性未设置为等待(尝试过,不起作用),我不能在属性中使用await.
除了使用方法而不是属性之外,还有什么方法可以解决这个问题?
Jon*_*eet 11
不 - 没有async属性这样的东西.即使你可以声明一个异步属性,它也必须被声明为具有返回值Task<int>而不是int...否则当你点击await表达式时你想要返回什么?
我强烈建议使用一种GetIdAsync方法,假设您确实需要异步行为.
Ste*_*ary 10
没有技术原因async在C#中不允许使用属性.这是一个有目的的设计决策,因为"异步属性"是矛盾的.
属性应返回当前值; 他们不应该开始背景操作.
通常,当有人想要"异步属性"时,他们真正想要的是以下之一:
async方法.async工厂方法来包含对象,要么使用async InitAsync()方法.数据绑定值将default(T)一直到计算/检索该值.AsyncLazy 我的博客或AsyncEx库.这将为您提供一个有await能力的财产.