async和await需要配合使用。异步方法中,遇到await就会立马返回。
如以下代码,会先输入nihao,再输出hello A。
异步方法没有返回值可以使用void标记。如果有返回值需要使用Task标记返回类型。
static void Main(string[] args)
{
AMethod();
Console.WriteLine("nihao");
Console.ReadLine();
}
public static async void AMethod()
{
await GetValueAsync(1234.5, 1.01);
Console.WriteLine("hello A");
}
public static Task<double> GetValueAsync(double num1, double num2)
{
return Task.Run(() => {
for(int i = 0; i < 1000000; i++)
{
num1 = num1 / num2;
}
return num1;
});
}
调用异步方法时还可以配置await。ConfigureAwait默认为true,即线程切换时保存上下文,供await之后代码使用。如果配置ConfigureAwait(false),则上下文为空。如:HttpContext.Current 为null
await GetValueAsync(1234.5, 1.01).ConfigureAwait(false);
调用异步方法的结果时,会阻塞线程。
var x = AMethod();
Console.WriteLine(x.Result);