很多朋友反馈说C#的线程好难呀,用起来太复杂了。确实,在任何语言里,涉及耗时任务都比较麻烦,为了解决C#中线程使用麻烦的问题,微软在.net4.5中简化了操作,提出了异步任务的思想。
在.net4.5以前,如果想要执行一件耗时任务,最常规的做法就是启动一个线程,再通过控件的Invoke方法回调回主线程,然后再操作UI。异步任务的方法可以简化这个过程,看下面的使用。
假如现在按钮1的点击事件我们需要执行一个耗时任务,并且需要获得int类型的返回值。传统的方法是使用线程和委托配合,将返回值Invoke回主线程,交给委托任务执行。
复制
private void button1_Click(object sender, EventArgs e) { //你的代码 }
使用异步任务的代码,在方法的返回类型前添加一个async
标记,然后使用Task类提供的方法,这里使用了lambda表达式,以实现匿名函数,当然也可以常规使用。需要注意的是,使用异步任务的方法必须使用await关键词修饰。await后跟需要等待的耗时任务。
复制
private async void button1_Click(object sender, EventArgs e) { await Task.Run(() => { Thread.Sleep(10000); //你的代码 }); }
带返回值的异步任务
复制
private async void button1_Click(object sender, EventArgs e) { var task = Task.Run(() => { //你的代码 Thread.Sleep(10000); return 123; }); int i = await task; }
异步任务如果不加await关键词,将会被当做同步任务执行,会阻塞主线程。另外异步任务会等待耗时任务执行完成,然后会接着主线程中的代码继续跑,对程序代码的可读性有非常好的提升。使用Thread线程经常会到处找跳到哪里去了,async则不会有这个问题。
评论 (0)