async和await用法

用async来修饰一个方法:表明这个方法是异步的,声明的方法的返回类型必须为:void或Task或Task<TResult>。

方法内部必须含有await修饰的方法:如果方法内部没有await关键字修饰的表达式,哪怕函数被async修饰也只能算作同步方法,执行的时候也是同步执行的。
被await修饰的只能是Task或者Task<TResule>类型,通常情况下是一个返回类型是Task/Task<TResult>的方法,当然也可以修饰一个Task/Task<TResult>变量,await只能出现在已经用async关键字修饰的异步方法中。

关于被修饰的对象,也就是返回值类型是Task和Task<TResult>函数或者Task/Task<TResult>类型的变量:如果是被修饰对象的前面用await修饰,那么返回值实际上是void或者TResult

private Task<string> TestMethod()
{
var task = Task.Run(()=> {
return "Hello";
});

return task;
}

string str = await TestMethod() 等价于  string str = TestMethod() .Result  注:尽量不要用TestMethod() .Result,容易导致代码死锁。

 

private async void button1_Click(object sender, EventArgs e)
{
var t = Task.Run(() => {
return "Hello";
});
textBox1.Text = await t;
}

posted @ 2020-12-30 09:13  建哥2012  阅读(491)  评论(0编辑  收藏  举报