我想知道如果我调用一个标记为async的方法却不使用await会发生什么。考虑以下示例:
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()方法中调用的awaited方法仍然能像预期的那样工作。正如你所看到的,setter方法不需要等待Initialize()方法,因为没有返回值,而且它是属性setter的最后一个调用。它有点像“火并忘”。
我要这样做的原因是我想结合MVVM和强制我使用异步方法的数据后端。
在上面的例子中,用户从列表中选择一个条目,程序应该在视图的另一部分显示有关该条目的详细信息。
我想将列表的当前选定条目绑定到DataId上,每当用户更改选择时,它就会更新详细视图。当然,可以从事件处理程序中进行异步方法调用,但为了实现更清晰的MVVM实现(主要使用数据绑定),我想避免使用事件处理程序。
await
的async
方法,但是你的Initialize()
不是async
的,但是它包含await
,这样编译不会通过。 - svick