C# 异步委托 async/await

1. async/await 概念: 

async/await是C# 5.0 推出的,async用来修饰方法, 表明这个方法是异步的,声明的方法的返回类型必须为: void Task 或 Task<TResult> : 就是有返回值的Task,TResult就是返回值类型,比如Task<int> 返回值为int 值。

await必须用来修饰Task 或 Task<TResult>,而且只能出现在已经用async关键字修饰的异步方法中。
await可以让主线程等待后台线程执行完毕。await不会阻塞住线程
通常情况下,async/await 成对出现才有意义。

private async void startDownUrl()
{
	HttpClient httpclient = new HttpClient();
	
	//当程序走到await的地方, 会检测等待的值是不是可用状态,
	//可用则继续执行下去,不可用则不继续执行下去而是立即返回
	string res = await httpclient.GetStringAsync("www.baidu.com");
	textBox1.Text = result;
}

//async/await其他用法
private async Task GetData1()
{
	await Task.Delay(10000);
}

private async Task<string> GetData2()
{
	await Task.Delay(10000);
	return "123";
}

2. 一个例子:

static void Main(string[] args)
{
	Console.WriteLine("1 线程ID: " +  Thread.CurrentThread.ManagedThreadId);
	Console.WriteLine("Main 方法执行开始");
	Run();
	Console.WriteLine("Main 方法执行结束");
	Console.Read();
}

static async void Run()
{
	Console.WriteLine("Run 方法执行开始");
	await Task.Run(()=> {
		Console.WriteLine("Task.Run 方法执行开始");
		Console.WriteLine("2 线程ID: " +  Thread.CurrentThread.ManagedThreadId);
		Thread.Sleep(10000);
		Console.WriteLine("Task.Run 方法执行结束");
	});
	Console.WriteLine("3 线程ID: " +  Thread.CurrentThread.ManagedThreadId);
	Console.WriteLine("Run 方法执行结束");
}

----输出结果:
1 线程ID: 1
Main 方法执行开始
Run 方法执行开始
Main 方法执行结束
Task.Run 方法执行开始
2 线程ID: 3
Task.Run 方法执行结束
3 线程ID: 3
Run 方法执行结束

3. 总结:

1. async 方法必须有Task.Run异步方法
2. async 方法里面通常由await关键字 它用在Task.run 前面 作用是告诉主线程 我这边及下面的代码不用你管了,
你返回继续执行其他的代码,在await之前还是属于主线程的,还是同步的。
3.await代码之前是主线程,await 之后包括 task run以及它后面的代码都是另一个线程。 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值