C# 彻底搞懂async/await
copy 备用
C# 彻底搞懂async/await - 五维思考 - 博客园 (cnblogs.com)
异步方法
微软建议异步方法的命名是在方法名后添加Aysnc后缀
异步方法的返回类型只能是void、Task、Task<TResult>
async 修饰异步方法
private async Task AsyncMethod()
用async来修饰一个方法,表明这个方法是异步的,声明的方法的返回类型必须为:void或Task或Task<TResult>。
方法内部必须含有await修饰的方法,如果方法内部没有await关键字修饰的表达式,哪怕函数被async修饰也只能算作同步方法,执行的时候也是同步执行的。
异步方法内人await修饰
被await修饰的只能是Task或者Task<TResule>类型,
通常情况下是一个返回类型是Task/Task<TResult>的方法,当然也可以修饰一个Task/Task<TResult>变量,
await只能出现在已经用async关键字修饰的异步方法中。
关于被修饰的对象,也就是返回值类型是Task和Task<TResult>函数或者Task/Task<TResult>类型的变量:如果是被修饰对象的前面用await修饰,那么返回值实际上是void或者TResult
static string testString = "12345";
private static async void func1async()
{
var t = Task.Run(() => {
Thread.Sleep(5000);
Console.WriteLine("4444 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
return "Hello I am TimeConsumingMethod";
});
testString = await t;
Console.WriteLine("3333 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(testString);
Console.WriteLine("5555 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
}
private static void test_async()
{
Console.WriteLine("1111 " + DateTime.Now.ToString("G") +" My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(testString);
func1async( );
Console.WriteLine("2222 " + DateTime.Now.ToString("G") + " My Thread ID is :" + Thread.CurrentThread.ManagedThreadId);
Console.WriteLine(testString);
}
浙公网安备 33010602011771号