摘要: 不同于等待直到结束和轮询,回调模式下一但初始线程发起了异步方法,就自己管自己了,不再考虑同步。当异步方法调用结束后,系统调用一个用户自定义的方法来处理结果,并且调用委托的EndInvoke方法。这个用户自定义的方法就是回调方法。 BeginInvoke的最后两个参数由回调函数使用。 1、最后两个中的 阅读全文
posted @ 2020-05-26 10:47 NicolasLiaoRan 阅读(458) 评论(0) 推荐(0) 编辑
摘要: 在轮询模式中,原始线程发起了异步方法的调用,做一些其他处理,然后使用IAsyncResult对象的IsComplete属性来定期检查开启的线程是否完成。如果异步方法已经完成,原始线程就调用EndInvoke并继续。否则,做一些其他处理,然后过一会儿再检查。 BeginInvoke返回一个IAsync 阅读全文
posted @ 2020-05-26 09:16 NicolasLiaoRan 阅读(1488) 评论(0) 推荐(0) 编辑
摘要: 最常用的异步是使用async/await特性和BackgroundWorker类,或者parallel并行库,但也可能会使用旧的模式来产生异步代码。 对于委托,当委托调用对象时,它调用了它的调用列表中包含的方法,这是同步完成的。 而如果委托对象在调用列表中只有一个方法(引用方法),它就可以异步执行这 阅读全文
posted @ 2020-05-25 19:32 NicolasLiaoRan 阅读(1108) 评论(0) 推荐(0) 编辑
摘要: 有些时候,会需要另建一个线程,这个线程在后台持续运行以完成某项工作,并不时地与主线程进行通信。BackgroundWorker类就用于此目的。 BackgroundWorker类包括 4个属性: 1、WorkerReportsProgress 2、WorkerSupportsCancellation 阅读全文
posted @ 2020-05-25 13:51 NicolasLiaoRan 阅读(378) 评论(0) 推荐(0) 编辑
摘要: MainWindow.xaml.cs public partial class MainWindow : Window { //CancellationTokenSource用于创建可分配给不同任务的CancellationToken对象。任何持有CancellationTokenSource的对象 阅读全文
posted @ 2020-05-25 10:47 NicolasLiaoRan 阅读(302) 评论(0) 推荐(0) 编辑
摘要: Task.Yield方法创建一个立即返回的awaitable。等待一个yield可以让人异步方法在执行后续部分的同时返回到调用方法。相当于离开当前的消息队列,回到队列末尾,让处理器有时间处理其他任务。 static class DoStuff { public static async Task<i 阅读全文
posted @ 2020-05-25 09:07 NicolasLiaoRan 阅读(843) 评论(0) 推荐(0) 编辑
摘要: 实际上异步方法在GUI程序中尤为有用,GUI程序在设计上就要求所有的现实变化都必须在GUI主线程上完成,比如点击按钮,展示标签,移动窗体等。Windows程序通过消息来实现这一点,消息会被放入由消息泵管理的消息队列中。 消息泵从消息队列中取出一条信息,并调用它的处理程序(handler)代码。当处理 阅读全文
posted @ 2020-05-22 20:13 NicolasLiaoRan 阅读(369) 评论(0) 推荐(0) 编辑
摘要: Task.Delay方法创建一个Task对象,该对象将暂停其在线程中的处理,并在一定时间之后完成。但与Thread.Sleep阻塞线程不同的是,Task.Delay不会阻塞线程,线程可以继续处理其他工作。 class Simple { Stopwatch sw = new Stopwatch(); 阅读全文
posted @ 2020-05-22 19:04 NicolasLiaoRan 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 一、在调用方法中同步地等待任务 static class MyDownloadString { public static void DoRun() { Task<int> t = CountCharactersAsync("https://www.baidu.com"); //t.Wait(); 阅读全文
posted @ 2020-05-22 18:44 NicolasLiaoRan 阅读(360) 评论(0) 推荐(0) 编辑
摘要: 异步方法的结构包含有3个不同的区域: async Task<int> CountCharactersAsync(int id,string site) { //section 1 第一个await表达式之前的部分 Console.WriteLine("Starting CounCharacters" 阅读全文
posted @ 2020-05-22 16:44 NicolasLiaoRan 阅读(358) 评论(1) 推荐(0) 编辑