OSS.Social微信項目標準庫介紹

来源:http://www.cnblogs.com/sunhoy/archive/2017/02/17/6411357.html
-Advertisement-
Play Games

經過本周的努力,昨晚終於完成OSS.Social微信項目的標準庫支持,當前項目你已經可以同時在.net framework和.net core 中進行調用,調用方法也發生了部分變化,這裡我簡單分享下,主要包含下邊幾個部分: · 移植後的變化 · 和OSS.Common,OSS.Http關係 · 非同步 ...


  經過本周的努力,昨晚終於完成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.CommonOSS.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後邊並不是立刻執行非同步,他只有在真正的非同步操作時才會處理,在這個例子中,也就是1,2,3 步會同步執行,4,5則是在非同步線程中執行,同時在執行第4步時,UpdateUserInfo()方法結束返回

  3. 異常註意問題:

   對於非同步異常,我推薦這篇文章《關於C#中async/await中的異常處理(上)》,這裡有一個問題需要強調一下,非同步之後最好要對返回的 Task 有後續的操作, 這樣如果有異常就會及時拋出,否則會在 GC 回收資源時觸發,如果沒有設置全局異常處理,很可能會引起應用程式池的崩潰。

 

如果你對我的代碼感興趣,可以直接查看我的GitHub,或者關註公眾號(OSSCoder):

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1:統計10.86.0.0/16網段的內網流量情況 將下麵腳本保存成文件traffic-lan.sh(運行後需要等待10秒抓包) 2:統計到外網IP的流量情況 將下麵腳本保存成文件traffic-wan.sh(運行後需要等待10秒抓包) 3:可以統計UDP的改進版本 4:後來發現iftop也可以完成 ...
  • 我的上一篇文章《Linux編程之PING的實現》里使用ICMP協議實現了PING的程式,ICMP除了實現這麼一個PING程式,還有哪些不為人知或者好玩的用途?這裡我將介紹ICMP另一個很有名的黑科技:ICMP洪水攻擊。 ICMP洪水攻擊屬於大名鼎鼎的DOS(Denial of Service)攻擊的 ...
  • 格式:cut [參數] 文本 參數:-d [分隔符] 指定分割符,預設為TAB -f 指定顯示的列數 -c 單位改為字元 示例:查看系統中所有的用戶名 ...
  • 我校的課程真是跟不上時代發展,甚至還在教授8051/8052單片機的內容,於是不甘寂寞的我就自己踏入了STM32單片機的坑…… 首先,我現在大二,剛學完模擬電子技術,還沒有學習數字電路技術,於是自學單片機開發會有一定困難,而我校要到大三才能開放單片機課程,這就很有趣了,我不得不去啃一些完全沒見過的玩 ...
  • 等待隊列 是內核中實現進程調度的一個十分重要的數據結構,其任務是維護一個鏈表,鏈表中每一個節點都是一個PCB(進程式控制制塊), 內核會將PCB掛在等待隊列中的所有進程都調度為睡眠狀態,直到某個喚醒的條件發生 。應用層的阻塞IO與非阻塞IO的使用我已經在 "Linux I/O多路復用" 一文中討論過了, ...
  • 簡介 RabbitMQ:一個消息系統,基於 AMQP 系統協議。 優點:健壯、使用簡單、開源和支持各種流行的語言等。 MQ(Message Queue):消息隊列的簡稱,是一種應用程式之間的通信機制。 用途:將無需立即回調獲取返回結果,並且耗時的操作,使用非同步處理的方式提高伺服器的吞吐量及性能。 ...
  • 初步應用vs2012這軟體,語言選擇c# , 框架選擇4(不要選擇最前和太後的框架)然後改個名字和保存路徑點確定就行了。 在main函數中寫代碼,大括弧裡面。 首先是最基本的輸入與輸出: Console.WriteLine(");//直接會輸出引號裡面的內容(如果直接寫入Write的話就不會換行。) ...
  • 電子面單開發流程 服務程式 生成單號,改變三個表: 抓類型表,抓取未處理的充值記錄->根據類型取面單類型表的最大單號(判斷是否在起始和結束之間,並設置郵件或者簡訊預警 )->根據單號規則和充值的數量生成單號明細入單號明細表,改變充值記錄的處理狀態 改變面單類型最大單號(事務提交)。 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...