最近我尝试了解新的 C# 特性,异步编程的 async/await 关键字。当我在网上搜索时,我遇到了这个例子:
static void Main(string[] args)
{
Console.WriteLine("Task based APM demo");
// Call Exponnent() asynchronously.
// And immediately return the control flow.
// If I don't put a Task here, the program will sometimes
// terminate immediately.
Task t = new Task(async () =>
{
int result = await Program.Exponent(10);
// After the operation is completed, the control flow will go here.
Console.WriteLine(result);
});
t.Start();
Console.ReadKey();
}
static async Task<int> Exponent(int n)
{
Console.WriteLine("Task started");
return await TaskEx.Run<int>(() => 2 << (n - 1));
}
}
我对此以及这些陈述的行为方式有疑问。首先,据我了解,当我们想要释放该进程并返回调用者上下文时使用的等待表达式。但是为什么这个表达式在 Exponent 方法调用它的那一行使用 this 呢?事实上,当编译器面对这行程序时会发生什么?字母问题是,为什么程序使用“TaskEx.Run”在 Exponent 方法的主体中返回结果?是否可以使用“return await (() => 2 << (n - 1));” 只要?编译器如何处理这一行?
提前致谢