美文网首页
诸子学游戏 学习服务器5

诸子学游戏 学习服务器5

作者: 诸子百家谁的天下 | 来源:发表于2018-10-06 16:00 被阅读16次

C#异步编程     https://msdn.microsoft.com/zh-cn/magazine/ff959203.aspx

异步做耗时操作:计算,通信(下载,上传等),磁盘读写等。

①:微软的API 在一个类中的方法一般以 xxxCompleted 为模板的方法,是一个delegate,需要 += method 操作的,一般异步完成之后回调这个方法,这样的模式称之为基于事件的模式。

②:SynchronizationContext ctx = SynchronizationContext.Current;一个线程一个SynchronizationContext 里面有send/post方法,可以在异步线程方法中调用send/post回调到SynchronizationContext 所在的线程执行。如果是基于多线程并发执行之后,需要对结果做排序处理,则要对send/post进行重写,在里面对结果重新排序,将事件封装在集合里面,在外部一直调用集合里面的事件,调用之后则移除事件,使用ConcurrentQueue安全队列最好。

③:IAsyncResult模式,Begin开始异步,End结束异步并回调。一般是在Begin方法中传入异步工作完成之后调用的一个方法,这个方法还是在异步线程中。

④:任务模式 System.Threading.Tasks.Task

Wait方法表示在当前的代码块中,指定的Task任务不完成,不会执行下面的代码。即同步阻塞。

ThreadPool 线程池  http://www.cnblogs.com/kissdodog/archive/2013/03/28/2986026.html

TaskCompletionSource 是创建表示异步操作的 Task 的常规机制。 TaskCompletionSource 只与一项任务相关联。 一旦对 TaskCompletionSource 调用 SetResult 方法,相关联的 Task 便会结束,返回 Task 的结果值。

基于事件,基于IAsyncResult模式都可以直接转换为Task线程模式

处理和组合任务 :

            A:等待 Task 任务完成    Task.WaitAny(...) ,Task.WaitAll(tasks)  静态方法调用            task1.Wait()实例对象调用。

            B:Task 任务完之后,再接一个Task 任务。

相关文章

网友评论

      本文标题:诸子学游戏 学习服务器5

      本文链接:https://www.haomeiwen.com/subject/htcooftx.html