中文字幕二区_国产精品免费在线观看_黄色网站观看_人人草人人澡_日本真实娇小xxxx

您的位置: 首頁 > 技術(shù)文檔 > 網(wǎng)絡編程 > 異步編程與響應式框架
PHP校驗ISBN碼的函數(shù) 回到列表 GraphDatabase在關系數(shù)據(jù)庫中的實現(xiàn)
 異步編程與響應式框架

作者:老趙 時間: 2010-09-25 文檔類型:轉(zhuǎn)載 來自:老趙點滴

第 1 頁 異步編程與響應式框架 [1]
第 2 頁 異步編程與響應式框架 [2]
第 3 頁 異步編程與響應式框架 [3]
第 4 頁 異步編程與響應式框架 [4]

更多擴展

.NET基礎類庫針對IEnumerable定義了大量的函數(shù)式的輔助方法,開發(fā)人員可以直接將它們組合運用在項目中。除了標準的LINQ操作方法之外,響應式框架中同樣定義了大量輔助方法,可以配合LINQ to Observable組合使用。例如本文開頭所設想的鼠標“拖動及繪圖”功能,便可以使用如下代碼完成:

var mouseMove = GetMouseMove();
var mouseDiff = mouseMove.Zip(mouseMove.Skip(1), (prev, curr) =>
    new
    {
        PrevPos = new Point(prev.EventArgs.X, prev.EventArgs.Y),
        CurrPos = new Point(curr.EventArgs.X, curr.EventArgs.Y)
    });
var mouseDrag = from _ in GetMouseDown()
                from diff in mouseDiff.TakeUntil(GetMouseUp())
                select diff;
mouseDrag.Subscribe(diff => DrawLine(diff.PrevPos, diff.CurrPos));

在這段代碼中,我們首先將mouseMove事件使用Skip跳開一項,再與自身通過Zip方法組合成mouseDiff,這是一個輸出相鄰兩次MouseMove事件坐標的數(shù)據(jù)源;接著,我們利用LINQ從觸發(fā)MouseDown事件開始,向mouseDiff數(shù)據(jù)源獲取每一項diff,直至(TakeUntil)觸發(fā)MouseUp事件,以此生成最終的mouseDrag;最后再將繪圖功能訂閱至這個數(shù)據(jù)源上。您會發(fā)現(xiàn)此時我們已經(jīng)無須手動維護操作過程中的各種狀態(tài)了,從事件的“開始”到“結(jié)束”均使用響應式框架的輔助方法“聲明”而來。

以上便是一個利用了Skip,Zip,TakeUntil等輔助方法的例子。當然,這些輔助方法在IEnumerable上都有語義相同的對應操作,而在響應式框架中還有更多輔助方法是針對特性異步場景的。假設我們現(xiàn)在要編寫一個即時翻譯功能,同時發(fā)起三個請求,將中文分別翻譯至英語、法語及西班牙語,并顯示最先返回的兩個結(jié)果(真是個奇怪的需求)。此外,我們不會在用戶輸入每個字符的時候便發(fā)起一個遠程請求,而是在用戶停止輸入0.5秒之后才根據(jù)當前的輸入框中的文字進行提示。于是我們可以編寫這樣的代碼:

var limit = TimeSpan.FromSeconds(0.5);
var translate =
    from _ in GetKeyPress().Throttle(limit)
    let text = this.txtInput.Text
    where text.Length > 0
    let english = Bing.Translate(text, "en")
    let french = Bing.Translate(text, "fr")
    let spanish = Bing.Translate(text, "es")
    from result in Observable.Join(
       english.And(french).Then((en, fr) =>
           new { English = en, French = fr, Spanish = "" }),
       english.And(spanish).Then((en, es) =>
           new { English = en, French = "", Spanish = es }),
       french.And(spanish).Then((fr, es) =>
           new { English = "", French = fr, Spanish = es }))
    select result;translate.Subscribe(...);

這里用到了Throottle方法,它會過濾某個數(shù)據(jù)源的輸出,確保在該數(shù)據(jù)源“靜默”特定時間之后,才將最近的一條數(shù)據(jù)推送至外部。此外,這里還使用了Observable.Join方法控制多個數(shù)據(jù)源,根據(jù)返回結(jié)果的先后獲得合適的結(jié)果。響應式框架提供了大量針對某種異步場景的輔助方法,例如用于定期推送數(shù)據(jù)的Interval方法,從一個數(shù)據(jù)源根據(jù)特定條件進行采樣的Sample方法,合并多個數(shù)據(jù)源的ForkJoin方法,以及表示流程控制的For,While,If等等。這些方法內(nèi)部會維護各種所需要的狀態(tài),為我們打理各種復雜的競爭情況,以此節(jié)省了開發(fā)人員的精力。

如果這些還不能滿足我們的要求,我們也可以根據(jù)自己的需要開發(fā)特定的輔助方法,就像我們在使用LINQ to Object時為IEnumerable所作的各種擴展那樣。響應式框架也提供了一系列Subject類型,簡化了IObservable自定義擴展的開發(fā)過程。由于響應式框架尚未正式發(fā)布,微軟目前建立了一個Wiki,用于展示關于各輔助方法及Subject類的使用示例及其他相關信息。

響應式框架的JavaScript版本

響應式編程的重要使用場景之一便是與用戶交互的GUI界面。例如,Silverlight禁止任何阻塞的IO操作,換言之Silverlight中的所有網(wǎng)絡操作都是異步的,微軟也正是出于簡化異步開發(fā)的目的才設計了響應式框架(事實上響應式框架已經(jīng)集成到Silverlight Toolkit中)。不過與Silverlight相比,基于瀏覽器的原生JavaScript應用程序無疑使用地更為廣泛。對于這樣的應用程序來說,動畫是異步的,AJAX請求也是異步的,我們幾乎可以斷言,如果有一套面向JavaScirpt應用程序的響應式框架,一定會比面向Silverlight的框架更有意義得多。

微軟也想到了這一點。之前我們討論的“響應式框架”,其實只是響應式編程模型的一種實現(xiàn)。更確切地說,我們只是討論了這套框架的.NET版本,微軟還提供了JavaScript版本的響應式框架。JavaScript版本的API與.NET版本幾乎完全一致,例如我們之前討論的拖放操作,使用JavaScript即可寫作:

var target = $("#dragTarget");
var mouseMove = target.toObservable("mousemove");
var mouseDiff = mouseMove.Zip(mouseMove.Skip(1),
    function(prev, curr) {
        return {
            PrevPos: { x: prev.clientX, y: prev.clientY },
            CurrPos: { x: curr.clientX, y: curr.clientY }
        };
    });
var mouseDown = target.toObservable("mousedown");
var mouseUp = target.toObservable("mouseup");
var mouseDrag = mouseDown.SelectMany(function() {
    mouseDiff.TakeUntil(mouseUp);
});mouseDrag.Subscribe(...);

由于沒有C#中的LINQ查詢語言,我們只能直接使用展開后的方法,如SelectMany來編寫邏輯。JavaScript版本的響應式框架還提供了一系列的“膠合”層,能夠與jQuery,Dojo,MooTools,Prototype等流行框架同時使用。例如,上一段代碼中的toObservable便是在jQuery根對象上擴展的方法。

總結(jié)

異步編程在用戶交互式界面及一些云計算場景中尤其重要。微軟的云編程能力團隊針對.NET平臺和JavaScirpt分別提供了一套響應式框架,希望以此簡化異步程序的開發(fā)。不過,這套響應式框架所表現(xiàn)出的理念是通用的。而且,事實上只要是擁有匿名函數(shù)及閉包的語言,例如Scala,Python,Ruby等等,實現(xiàn)這樣一套框架其實都不是十分困難的事情。

原文:http://blog.zhaojie.me/2010/09/async-programming-and-reactive-framework.html

本文鏈接:http://www.95time.cn/tech/program/2010/7999.asp 

出處:老趙點滴
責任編輯:bluehearts

上一頁 異步編程與響應式框架 [3] 下一頁

◎進入論壇網(wǎng)絡編程版塊參加討論

作者文章
使用OpenOffice.org將各類文檔轉(zhuǎn)為PDF
關鍵字搜索 常規(guī)搜索 推薦文檔
熱門搜索:CSS Fireworks 設計比賽 網(wǎng)頁制作 web標準 用戶體驗 UE photoshop Dreamweaver Studio8 Flash 手繪 CG
站點最新 站點最新列表
周大福“敬•自然”設計大賽開啟
國際體驗設計大會7月將在京舉行
中國國防科技信息中心標志征集
云計算如何讓安全問題可控
云計算是多數(shù)企業(yè)唯一擁抱互聯(lián)網(wǎng)的機會
阿里行云
云手機年終巨獻,送禮標配299起
阿里巴巴CTO王堅的"云和互聯(lián)網(wǎng)觀"
1499元買真八核 云OS雙蛋大促
首屆COCO桌面手機主題設計大賽
欄目最新 欄目最新列表
淺談JavaScript編程語言的編碼規(guī)范
如何在illustrator中繪制臺歷
Ps簡單繪制一個可愛的鉛筆圖標
數(shù)據(jù)同步算法研究
用ps作簡單的作品展示頁面
CSS定位機制之一:普通流
25個最佳最閃亮的Eclipse開發(fā)項目
Illustrator中制作針線縫制文字效果
Photoshop制作印刷凹凸字體
VS2010中創(chuàng)建自定義SQL Rule
>> 分頁 首頁 前頁 后頁 尾頁 頁次:4/41個記錄/頁 轉(zhuǎn)到 頁 共4個記錄

藍色理想版權(quán)申明:除部分特別聲明不要轉(zhuǎn)載,或者授權(quán)我站獨家播發(fā)的文章外,大家可以自由轉(zhuǎn)載我站點的原創(chuàng)文章,但原作者和來自我站的鏈接必須保留(非我站原創(chuàng)的,按照原來自一節(jié),自行鏈接)。文章版權(quán)歸我站和作者共有。

轉(zhuǎn)載要求:轉(zhuǎn)載之圖片、文件,鏈接請不要盜鏈到本站,且不準打上各自站點的水印,亦不能抹去我站點水印。

特別注意:本站所提供的攝影照片,插畫,設計作品,如需使用,請與原作者聯(lián)系,版權(quán)歸原作者所有,文章若有侵犯作者版權(quán),請與我們聯(lián)系,我們將立即刪除修改。

您的評論
用戶名:  口令:
說明:輸入正確的用戶名和密碼才能參與評論。如果您不是本站會員,你可以注冊 為本站會員。
注意:文章中的鏈接、內(nèi)容等需要修改的錯誤,請用報告錯誤,以利文檔及時修改。
不評分 1 2 3 4 5
注意:請不要在評論中含與內(nèi)容無關的廣告鏈接,違者封ID
請您注意:
·不良評論請用報告管理員,以利管理員及時刪除。
·尊重網(wǎng)上道德,遵守中華人民共和國的各項有關法律法規(guī)
·承擔一切因您的行為而直接或間接導致的民事或刑事法律責任
·本站評論管理人員有權(quán)保留或刪除其管轄評論中的任意內(nèi)容
·您在本站發(fā)表的作品,本站有權(quán)在網(wǎng)站內(nèi)轉(zhuǎn)載或引用
·參與本評論即表明您已經(jīng)閱讀并接受上述條款
推薦文檔 | 打印文檔 | 評論文檔 | 報告錯誤  
專業(yè)書推薦 更多內(nèi)容
網(wǎng)站可用性測試及優(yōu)化指南
《寫給大家看的色彩書1》
《跟我去香港》
眾妙之門—網(wǎng)站UI 設計之道
《Flex 4.0 RIA開發(fā)寶典》
《贏在設計》
犀利開發(fā)—jQuery內(nèi)核詳解與實踐
作品集 更多內(nèi)容

雜⑦雜⑧ Gold NORMANA V2