【发布时间】:2016-07-14 18:51:51
【问题描述】:
要理解这个问题,请查看以下示例的await 调用和函数InitSyncContext() 的定义。
基于此,我想知道程序在每种情况下的行为方式,因为我不完全理解调用 await InitSyncContext(store) 和在内部调用 await 而不返回 Task 之间的区别.
作为参考,我之前做过研究,我发现了一个类似的example here,但我认为它在我的情况下有所不同。
*以下代码是真实世界代码的简化示例,仅用于演示目的。
void Main()
{
Initializer();
}
private async void Initializer()
{
var store = InitLocalStore();
await InitSyncContext(store); // <-- Here, await call
InitFileSync(store);
}
// Here returns Task (without having a return inside. No compile errors)
private async Task InitSyncContext(MobileServiceSQLiteStore store)
{
await Client.SyncContext.InitializeAsync(store);
}
//------------- Second Method -------------
void Main()
{
Initializer();
}
private void Initializer()
{
var store = InitLocalStore();
InitSyncContext(store); // <-- Here without await call
InitFileSync(store);
}
// Here is void but with a async call inside
private async void InitSyncContext(MobileServiceSQLiteStore store)
{
await Client.SyncContext.InitializeAsync(store);
}
【问题讨论】:
-
您不能在非异步方法中使用 await 关键字。它不是 C# 语言中的有效语法。这不会编译
-
@SteveCooper 感谢您指出这一点。我纠正了这个例子。此代码取自真实世界的代码(但没有 Main 定义),因此我可以对其进行测试。这样就可以编译了。
-
@MickyD - 坚持这个作为答案。我会投票...
-
@hbob 实际上是的,这就是问题所在,但我的问题是
await在类似环境中的行为(不一定使用 Xamarin,而是 C#)。要在类构造方法中使用await,我实现了此处描述的工厂模式blog.stephencleary.com/2013/01/async-oop-2-constructors.html,并且我没有尝试在控制台应用程序中使用Xamarin。
标签: c# .net asynchronous async-await task