【发布时间】:2014-02-18 16:45:50
【问题描述】:
我想知道如果我调用一个标记为异步的方法而不使用等待会发生什么。考虑这个例子:
private int id = 0;
async Task Initialize()
{
var content = await LoadFromDisk(id);
await Process(content);
return;
}
DataId
{
get { return id; }
set { id = value; Initialize(); }
}
我知道这会产生编译警告,但我的问题是 Initialize() 中等待的方法调用是否仍能按预期工作。如您所见,setter 没有必要等待 Initialize(),因为没有返回值,并且它是属性设置器的最后一次调用。这有点像火了然后忘记了。
我想这样做的原因是我想将 MVVM 和迫使我使用异步方法的数据后端结合起来。
在上面的示例中,用户从列表中选择一个条目,程序应在视图的另一部分显示有关该条目的详细信息。
我想将列表中当前选择的条目绑定到 DataId,只要用户更改选择,它就会更新详细视图。当然,可以从事件处理程序执行异步方法调用,但为了更简洁的 MVVM 实现(主要使用数据绑定),我想避免使用事件处理程序。
【问题讨论】:
-
我很困惑,你说的
async方法没有await,但是你的Initialize()不是async,但确实包含await,它不会编译。 -
抱歉,忘记了 async 关键字。我已经在帖子中修复了它。
标签: c# mvvm asynchronous windows-store-apps async-await