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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...