C#~非同步程式設計在專案中的使用

張佔嶺發表於2014-07-25

一些閒話

對非同步程式設計沒有了解的同學可以看我的這篇文章<C#~非同步程式設計>,今天主要說一下,在專案中怎麼就用到了非同步程式設計!在進行WEB開發時,非同步這塊我們用的並不多,但當你的專案做到一定規模時,它可以與其它站點(API),其它設定(手機,平板)之間的通訊就多了起來,這時,為了提高UI(瀏覽器,手機終端,平板終端,winform終端)的響應能力,我們就需要引入非同步了.

專案用到了它

我們這個專案是個直播功能的專案,直播的內容儲存在第三方,它們為我們提供了相關的介面,web服務的(soap的,目前比較流行RestFul的),當我們老師端完成了直播後,需要關閉它,然後第三方會通知我們,我們接到通過後,將課程的狀態改為"完成"就可以了,在這裡,我們需要用到了錄課功能,錄課是第三方在老師結束直播後才進行的工作,所以,當第三方通知我們完成後, 這時,錄課的視訊還沒有寫在第三方伺服器上,所以,我們必須要讓程式sleep一下,再進行獲取工作,這種情況,就用到了非同步和執行緒的知識了.

專案中的程式碼

我自己封裝了一個根據時間段去呼叫WEB服務的方法,下面是程式碼

        /// <summary>
        /// 執行緒輪訓服務
        /// </summary>
        /// <param name="ws">要輪訓的程式碼塊</param>
        /// <param name="interval">間隔的秒數</param>
        /// <returns></returns>
        private string ThreadPoolService(Func<string> ws, Action<string> logger, params int[] interval)
        {
            string url = ws();
            foreach (int i in interval)
            {
                Thread.Sleep(i * 1000);
                url = ws();
                if (!string.IsNullOrWhiteSpace(url))
                {
                    logger(string.Format("點播輪訓呼叫時間:{0}秒,發生的時間:{1}秒", i, DateTime.Now));
                    break;
                }
            }
            return url;
        }

而剩下的工作就是呼叫它了,這塊內容就與具體專案有關了,在這裡就不公開出來了,哈哈.

相關文章