wow做宏的网站,网站建设中的时尚资讯,郑州冬青街 网站建设,重庆网站建设 优化经过本周的努力#xff0c;昨晚终于完成OSS.Social微信项目的标准库支持#xff0c;当前项目你已经可以同时在.net framework和.net core 中进行调用#xff0c;调用方法也发生了部分变化#xff0c;这里我简单分享下#xff0c;主要包含下边几个部分#xff1a; 移植后… 经过本周的努力昨晚终于完成OSS.Social微信项目的标准库支持当前项目你已经可以同时在.net framework和.net core 中进行调用调用方法也发生了部分变化这里我简单分享下主要包含下边几个部分 · 移植后的变化 · 和OSS.CommonOSS.Http关系 · 异步Task使用介绍 一. 移植后的变化 如果不了解OSS.Social的同学可以参看我前面的几篇文章介绍这里就不多说了。这次移植的变化首先是对.net core项目能够提供直接的支持当前的使用的.net standard标准库版本为1.3版对应的framework支持为4.6版对应.net core 的版本现在基本都支持源码详见github在项目我提供了Framework 4.6的单元测试项目和.netcoreapp1.0的网站项目。由于时间不充裕并没有做全部接口测试如果发现有bug可以及时和我联系。 其次是对异步的支持这个也是这次变动最大的地方几乎公号管理功能Offcial模块下的所有核心方法都转为异步方式提供这些完全归功于HttpClient带来便利在底层IO层面提供了最基础的异步支持。 当前可以像如下方式调用 当然在很多情况下需要及时对结果进行处理给出对应的响应信息为了这种同步需求所以我通过调用Task的wait()方法封装了一个简单的扩展方法WaitResult()直接可以如下调用 二. 和OSS.CommonOSS.Http关系 OSS.Common和OSS.Http我很早以前写的两个基础模块现在都统一到OSS系列下现在都已经提供了.Net Standard的支持。前者负责全局结果实体加密算法基础辅助类的实现。像在接口方法中所有的返回实体都会继承ResultMo实体其中提供了IsSuccess属性Ret和Message信息统一项目中的传值以及结果判断统一判断依据。后边会有针对它的文章介绍这里略过如果你想在项目中使用它可以直接通过Nuget安装 至于OSS.Http主要负责对Rest接口请求的封装底层已经由HttpWebRequest迁移至HttpClient模块如果你感兴趣可以参考我写的《完成OSS.Http底层HttpClient重构封装》的文章当前也可以通过Nuget安装 三. 异步Task使用介绍 1. 基本介绍 因为在这个项目中使用了大量的async异步关键字所以对于这种情况使用较少的同学可能略微有些不适那这里我主要把异步的常见使用情况给大家介绍下。 异步在我印象中从.net体系下最开始的使用Thread到后来的Task再后来的async和wait关键字。它的语法越来越精简在Framework2.0时代我们可能需要通过 new Thread(执行任务).Start() 方式来创建异步线程。因为系统线程的频繁创建会造成系统资源的大量消耗所以.net维护了一个线程池可以让我们通过 ThreadPool 来直接调用线程池中已经维护好的线程我们可以很简单的通过 ThreadPool.QueueUserWorkItem(执行任务) 完成异步线程的调用。 再后边.net 提供了 Task.Run((){ 执行任务 }) 这种形式的异步调用这种形式默认使用线程池下的线程同时返回一个 Task 对象可以通过这个对象来等待或者判断任务的完成状态等。 虽然这个时候使用多线程异步操作已经相当简单了但是有时候异步代码还是要单独进行处理会造成一定的层级关系。所以后来就有 async和await 关键字可以让我们能够像同步流程一样写异步代码。在下边我用一个简单的例子讲解一下。 2. 使用形式 这里我通过一个简单的例子来给大家分享一下假如我们现在有一个需求需要通过用户手机号请求另外一个系统下的用户名并给用户推送短信消息。下边是我使用asyn和await写的一个简单例子。 在这个例子中如果你把await和asyn拿开那么流程就是一个完整的同步流程但是加上之后就变成了一个异步。 这里要特殊说一下await后边并不是立刻执行异步他只有在真正的异步操作时才会处理在这个例子中也就是12,3 步会同步执行4,5则是在异步线程中执行同时在执行第4步时UpdateUserInfo()方法结束返回 3. 异常注意问题 对于异步异常我推荐这篇文章《关于C#中async/await中的异常处理上》这里有一个问题需要强调一下异步之后最好要对返回的 Task 有后续的操作 这样如果有异常就会及时抛出否则会在 GC 回收资源时触发如果没有设置全局异常处理很可能会引起应用程序池的崩溃。 如果你对我的代码感兴趣可以直接查看我的GitHub或者关注公众号OSSCoder 原文地址http://www.cnblogs.com/sunhoy/p/6411357.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注