專利名稱:用于應(yīng)用框架不可知的異步組件的機(jī)制的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及軟件開(kāi)發(fā)技術(shù),尤其涉及這樣的機(jī)制該機(jī)制中異步操作管理器向異步組件提供標(biāo)準(zhǔn)化接口,使得異步組件以相同的方式與異步操作管理器接口,而不考慮構(gòu)造其中包括異步組件的應(yīng)用所使用的特定應(yīng)用框架。
背景技術(shù):
計(jì)算技術(shù)改變了人們工作和游戲的方式。計(jì)算技術(shù)依賴于包括互連處理、內(nèi)存、通信和用戶界面設(shè)備在內(nèi)的復(fù)雜硬件。軟件支配了這些各種物理組件怎樣彼此交互以及和用戶交互,以便允許不受限制的各種應(yīng)用。
軟件通常由程序員使用源代碼而創(chuàng)建。源代碼包括對(duì)于程序員相對(duì)直觀的語(yǔ)言和符號(hào)。然而,源代碼不可由處理器直接解釋。因而,為了獲得起作用的軟件,把源代碼解釋或編譯成二進(jìn)制指令和數(shù)據(jù),可以直接指令處理器應(yīng)該執(zhí)行哪些特定動(dòng)作以便啟用軟件的功能。
隨著時(shí)間進(jìn)展,軟件變得越來(lái)越復(fù)雜。一個(gè)應(yīng)用包含幾千條、甚至幾百萬(wàn)條不同的二進(jìn)制指令根本不奇怪。軟件開(kāi)發(fā)中的這種快速發(fā)展很大程度上是由于一旦構(gòu)造了執(zhí)行特定的較低級(jí)任務(wù)的組件,該組件就被結(jié)合到要執(zhí)行該較低級(jí)任務(wù)的許多不同的應(yīng)用中,即使這些應(yīng)用的較高級(jí)功能不盡相同。組件是計(jì)算機(jī)可執(zhí)行指令的離散集合,執(zhí)行指令時(shí)能實(shí)現(xiàn)一個(gè)或多個(gè)功能。組件可以被其它軟件組件或應(yīng)用所調(diào)用。面向?qū)ο蟮某绦蛟O(shè)計(jì)啟用該功能。因而,應(yīng)用程序員通常訪問(wèn)大范圍的各種組件,通過(guò)放置與組件適當(dāng)接口的功能調(diào)用而將組件結(jié)合在應(yīng)用程序中。應(yīng)用程序可以結(jié)合許多不同的組件。
應(yīng)用程序可以使用許多廣泛使用的應(yīng)用框架之一來(lái)構(gòu)造。應(yīng)用框架的實(shí)例包括WINDOWS Forms客戶端用戶界面(UI)程序設(shè)計(jì)框架、ASP.NET服務(wù)器端UI程序設(shè)計(jì)和HTTP框架、自由線程控制臺(tái)應(yīng)用、嵌入SQL服務(wù)器的應(yīng)用、等等。通常,為了使組件可用于可能已經(jīng)用多個(gè)應(yīng)用框架之一寫(xiě)入的應(yīng)用,組件一般會(huì)或者被特別設(shè)計(jì),或者被寫(xiě)入任一多個(gè)框架后的應(yīng)用中的作業(yè),或者必需是一個(gè)與每一個(gè)框架相對(duì)應(yīng)的組件。
重要的是組件考慮到在執(zhí)行異步操作時(shí)的特定應(yīng)用框架。異步操作是當(dāng)其它進(jìn)程正在進(jìn)行時(shí)在另一執(zhí)行線程上或在某片硬件上進(jìn)行到完成的操作。當(dāng)異步操作完成時(shí),出現(xiàn)一事件通知,以執(zhí)行在目標(biāo)應(yīng)用框架規(guī)則的環(huán)境中寫(xiě)入的代碼。然而,通知返回所依據(jù)的環(huán)境和線程很大程度上取決于構(gòu)造結(jié)合組件的應(yīng)用所使用的應(yīng)用框架。因此,按照相應(yīng)的應(yīng)用框架所使用的特定線程和并發(fā)模型,可以以使組件在通知發(fā)出時(shí)準(zhǔn)備好接收通知的方式來(lái)構(gòu)造組件。否則,異步操作會(huì)失敗。
因而,對(duì)于在跨多個(gè)框架工作的異步操作而言,為一個(gè)應(yīng)用框架構(gòu)造一個(gè)獨(dú)立的組件,為另一個(gè)應(yīng)用框架構(gòu)造一個(gè)獨(dú)立的組件,對(duì)于所有應(yīng)用框架依此類推。或者,可以構(gòu)造組件與多個(gè)應(yīng)用框架的任何一個(gè)協(xié)同工作。然而,在任一種情況下,組件的程序設(shè)計(jì)者都需要考慮各個(gè)應(yīng)用框架的線程和并發(fā)模型,并且通過(guò)明確起草的源代碼來(lái)解決線程和并發(fā)模型問(wèn)題。
因而,有利的是機(jī)制允許組件工作在寬的各種應(yīng)用框架下,而組件的設(shè)計(jì)者無(wú)須考慮諸如線程和并發(fā)模型這樣的應(yīng)用框架特定的問(wèn)題。更有利的是由于特定的組件僅與特定的應(yīng)用框架協(xié)同工作,因此未削減應(yīng)用的組件用途。
發(fā)明內(nèi)容
本發(fā)明的原理克服了現(xiàn)有技術(shù)的上述問(wèn)題,本發(fā)明中異步操作管理器允許組件以標(biāo)準(zhǔn)化方式執(zhí)行異步操作,而不考慮構(gòu)造包括該組件的應(yīng)用所使用的應(yīng)用框架。這能夠更容易地構(gòu)造單個(gè)組件而同時(shí)允許該組件執(zhí)行異步操作,而不考慮用于構(gòu)造應(yīng)用的應(yīng)用框架。
按照本發(fā)明的原理,按照特定的應(yīng)用框架來(lái)構(gòu)造應(yīng)用。組件被結(jié)合到該應(yīng)用中。當(dāng)要執(zhí)行異步操作時(shí),組件被配置成以獨(dú)立于構(gòu)造應(yīng)用所使用的特定應(yīng)用框架的方式來(lái)發(fā)出一標(biāo)準(zhǔn)函數(shù)調(diào)用。異步操作管理器被配置成檢測(cè)構(gòu)造應(yīng)用所使用的特定應(yīng)用框架;接收標(biāo)準(zhǔn)函數(shù)調(diào)用;按照應(yīng)用框架的線程和并發(fā)模型來(lái)執(zhí)行異步操作;以及當(dāng)異步操作完成時(shí)以按照線程和并發(fā)模型的方式向組件發(fā)出一通知。異步操作管理器可以通過(guò)從應(yīng)用框架自身接收通知或函數(shù)調(diào)用來(lái)確定應(yīng)用框架。
本發(fā)明的附加特性和優(yōu)點(diǎn)將在下面的描述中提出,部分將從描述中顯而易見(jiàn),或者可以通過(guò)實(shí)踐本發(fā)明而得知。本發(fā)明的特性和優(yōu)點(diǎn)可以用所附權(quán)利要求中特別指出的設(shè)備和組合來(lái)實(shí)現(xiàn)和獲得。從下列描述和所附權(quán)利要求中,本發(fā)明的這些及其它特性將變得更為明顯,或者可以通過(guò)下面提出的本發(fā)明的實(shí)踐而得知。
為了描述其中可獲得本發(fā)明的上述及其它優(yōu)點(diǎn)和特性的方式,參照在附圖中說(shuō)明的特定實(shí)施例,將提供對(duì)上面簡(jiǎn)述的發(fā)明的更詳細(xì)的描述。可以理解,這些附圖僅僅描述了本發(fā)明的典型實(shí)施例,不應(yīng)被理解為限制其范圍,將通過(guò)使用附圖用另外的具體內(nèi)容和細(xì)節(jié)來(lái)描述和說(shuō)明本發(fā)明,附圖中圖1說(shuō)明了可以實(shí)現(xiàn)本發(fā)明特征的適當(dāng)計(jì)算系統(tǒng);圖2說(shuō)明了一異步操作管理器,其通過(guò)從被結(jié)合在按照多個(gè)應(yīng)用框架構(gòu)造的應(yīng)用中的組件接收函數(shù)調(diào)用來(lái)便于異步操作,在該多個(gè)應(yīng)用框架中異步操作管理器可以與多個(gè)框架通信;以及圖3說(shuō)明了按照本發(fā)明原理的一種使異步操作管理器便于異步操作的方法。
具體實(shí)施例方式
本發(fā)明的原理涉及這樣的機(jī)制其中異步操作管理器允許組件以標(biāo)準(zhǔn)化的方式執(zhí)行異步操作,而不考慮構(gòu)造結(jié)合該組件的應(yīng)用所使用的應(yīng)用框架。這允許更容易地構(gòu)造單個(gè)組件同時(shí)允許該組件執(zhí)行異步操作,而不考慮使用多個(gè)應(yīng)用框架中的哪一個(gè)來(lái)構(gòu)造應(yīng)用。
本發(fā)明范圍內(nèi)的實(shí)施例包括用于攜帶或其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)的計(jì)算機(jī)可讀媒質(zhì)。這種計(jì)算機(jī)可讀媒質(zhì)可以是能由通用或?qū)S糜?jì)算機(jī)所訪問(wèn)的任何可用的媒質(zhì)。例如、但不限制,這種計(jì)算機(jī)可讀媒質(zhì)可以包括物理的計(jì)算機(jī)可讀媒質(zhì),比如RAM、ROM、EEPROM、CD-ROM或其它光盤(pán)存儲(chǔ)器、磁盤(pán)存儲(chǔ)器或其它磁性存儲(chǔ)設(shè)備,或者可用于攜帶或存儲(chǔ)期望程序代碼裝置的任何其它媒質(zhì),其中所述程序代碼裝置的形式為計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu),并能被通用或?qū)S糜?jì)算機(jī)所訪問(wèn)。
當(dāng)在網(wǎng)絡(luò)上或者到計(jì)算機(jī)的另一通信連接(或硬線、無(wú)線、或硬線和無(wú)線的組合)上傳輸或提供信息時(shí),計(jì)算機(jī)把連接適當(dāng)?shù)匾暈橛?jì)算機(jī)可讀媒質(zhì)。這樣,任何這樣的連接都被適當(dāng)?shù)胤Q為計(jì)算機(jī)可讀媒質(zhì)。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀媒質(zhì)的范圍內(nèi)。計(jì)算機(jī)可執(zhí)行指令包括例如使通用計(jì)算機(jī)、專用計(jì)算機(jī)或?qū)S锰幚碓O(shè)備執(zhí)行特定的功能或一組功能的任何指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如像匯編語(yǔ)言這樣的二進(jìn)制、中間格式指令,或者甚至是源代碼。盡管不作要求,仍將以計(jì)算機(jī)可執(zhí)行指令的一般上下文來(lái)描述本發(fā)明,比如由網(wǎng)絡(luò)環(huán)境中的計(jì)算機(jī)所執(zhí)行的程序模塊。一般而言,程序模塊包括執(zhí)行特定的任務(wù)或?qū)崿F(xiàn)特定的抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。
本領(lǐng)域的技術(shù)人員會(huì)理解,本發(fā)明可以在有許多種計(jì)算機(jī)系統(tǒng)配置類型的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)現(xiàn),包括個(gè)人計(jì)算機(jī)、手提設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程的消費(fèi)者電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)等等。本發(fā)明也可以在分布式計(jì)算環(huán)境中實(shí)現(xiàn),其中由通過(guò)通信網(wǎng)絡(luò)相連(或通過(guò)硬線連接、無(wú)線連接、或通過(guò)硬線和無(wú)線連接的組合)的本地和遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
圖1說(shuō)明了適當(dāng)?shù)挠?jì)算環(huán)境,其中可以以計(jì)算機(jī)120的形式采用本發(fā)明的原理。計(jì)算機(jī)120包括處理單元121、系統(tǒng)內(nèi)存122、及把包括系統(tǒng)內(nèi)存122在內(nèi)的各種系統(tǒng)組件耦合至處理單元121的系統(tǒng)總線123。
系統(tǒng)總線123可能是多種類型總線結(jié)構(gòu)的任一種,包括內(nèi)存總線或內(nèi)存控制器、外圍設(shè)備總線、及使用任一多種總線結(jié)構(gòu)的本地總線。系統(tǒng)內(nèi)存包括只讀內(nèi)存(ROM)124和隨機(jī)存取內(nèi)存(RAM)125。基本輸入/輸出系統(tǒng)(BIOS)126可以被存儲(chǔ)在ROM124中,其包含例如在啟動(dòng)期間幫助在計(jì)算機(jī)120內(nèi)的元件間傳輸信息的基本例程。
計(jì)算機(jī)120還可以包括用于向磁性硬盤(pán)139讀寫(xiě)的磁性硬盤(pán)驅(qū)動(dòng)器127;用于向可移動(dòng)磁盤(pán)129讀寫(xiě)的磁盤(pán)驅(qū)動(dòng)器128;以及用于向諸如CD-ROM這樣的可移動(dòng)光盤(pán)131或其它光學(xué)媒質(zhì)讀寫(xiě)的光盤(pán)驅(qū)動(dòng)器130。磁性硬盤(pán)驅(qū)動(dòng)器127、磁盤(pán)驅(qū)動(dòng)器128以及光盤(pán)驅(qū)動(dòng)器130分別通過(guò)硬盤(pán)驅(qū)動(dòng)器接口132、磁盤(pán)驅(qū)動(dòng)器接口133和光盤(pán)驅(qū)動(dòng)器接口134連到系統(tǒng)總線123。驅(qū)動(dòng)器和它們相關(guān)的計(jì)算機(jī)可讀媒質(zhì)為計(jì)算機(jī)120的計(jì)算機(jī)可執(zhí)行指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊及其它數(shù)據(jù)提供了非易失性存儲(chǔ)。盡管這里描述的示例性環(huán)境采用了磁性硬盤(pán)139、可移動(dòng)磁盤(pán)129以及可移動(dòng)光盤(pán)131,也可以使用其它類型的用于存儲(chǔ)數(shù)據(jù)的計(jì)算機(jī)可讀媒質(zhì),包括磁性盒帶、閃存卡、數(shù)字化視頻盤(pán)、貝努力盒帶、RAM、ROM等等。
包括一個(gè)或多個(gè)程序模塊的程序代碼裝置可以被保存在硬盤(pán)139、磁盤(pán)129、光盤(pán)131、ROM124或RAM125上,包括操作系統(tǒng)135、一個(gè)或多個(gè)應(yīng)用程序136、其它程序模塊137以及程序數(shù)據(jù)138。用戶可以通過(guò)鍵盤(pán)140、指點(diǎn)設(shè)備142或其它輸入設(shè)備(未示出)(比如麥克風(fēng)、游戲桿、游戲板、圓盤(pán)式衛(wèi)星天線、掃描儀等等)把指令和信息輸入到計(jì)算機(jī)120中。這些及其它輸入設(shè)備通常通過(guò)與系統(tǒng)總線123耦合的串行端口接口146連接到處理單元121。或者,輸入設(shè)備可以通過(guò)其它接口相連,比如并行端口、游戲端口或通用串行總線(USB)。監(jiān)視器147或另一顯示設(shè)備也經(jīng)由諸如視頻適配器148這樣的接口連到系統(tǒng)總線123。除了監(jiān)視器以外,個(gè)人計(jì)算機(jī)一般包括其它外圍輸出設(shè)備(未示出),比如揚(yáng)聲器和打印機(jī)。
計(jì)算機(jī)120可以工作在網(wǎng)絡(luò)化環(huán)境中,該環(huán)境使用與諸如遠(yuǎn)程計(jì)算機(jī)149a和149b這樣的一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)之間的邏輯連接。遠(yuǎn)程計(jì)算機(jī)149a和149b各可以是另一臺(tái)個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它公共網(wǎng)絡(luò)節(jié)點(diǎn),并且一般包括上述與計(jì)算機(jī)120有關(guān)的許多或全部元件,盡管圖1中僅說(shuō)明了存儲(chǔ)器存儲(chǔ)設(shè)備150a和150b以及它們相關(guān)的應(yīng)用程序136a和136b。圖1所述的邏輯連接包括局域網(wǎng)(LAN)151和廣域網(wǎng)(WAN)152,這里作為示例給出而非限制。這種網(wǎng)絡(luò)環(huán)境在辦公室、企業(yè)范圍計(jì)算機(jī)網(wǎng)絡(luò)、企業(yè)內(nèi)部網(wǎng)和因特網(wǎng)中是常見(jiàn)的。
當(dāng)用于LAN網(wǎng)絡(luò)環(huán)境中時(shí),計(jì)算機(jī)120通過(guò)網(wǎng)絡(luò)接口或適配器153與局域網(wǎng)151相連。當(dāng)用于WAN網(wǎng)絡(luò)環(huán)境中時(shí),計(jì)算機(jī)120可以包括調(diào)制解調(diào)器154、無(wú)線鏈路、或者用于在諸如因特網(wǎng)這樣的廣域網(wǎng)152上構(gòu)造通信的其它裝置。調(diào)制解調(diào)器154可以是內(nèi)置或外置的,它通過(guò)串行端口接口146與系統(tǒng)總線123相連。在網(wǎng)絡(luò)化環(huán)境中,關(guān)于計(jì)算機(jī)120所述的程序模塊或其部分可以被存儲(chǔ)在遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中??梢岳斫?,所示網(wǎng)絡(luò)連接是示例性的,也可以使用在廣域網(wǎng)152上建立通信的其它裝置。
雖然圖1給出了本發(fā)明的適當(dāng)操作環(huán)境,然而也可以在能夠?yàn)g覽網(wǎng)站的任何計(jì)算系統(tǒng)中采用本發(fā)明的原理。圖1所述的計(jì)算系統(tǒng)僅是說(shuō)明性的,只不過(guò)代表了其中可實(shí)現(xiàn)本發(fā)明原理的許多種環(huán)境的一小部分。在說(shuō)明書(shū)和權(quán)利要求書(shū)中,“計(jì)算系統(tǒng)”被廣泛地定義為能使用軟件來(lái)執(zhí)行一個(gè)或多個(gè)功能的任何硬件組件。計(jì)算系統(tǒng)的示例包括臺(tái)式計(jì)算機(jī)、便攜式計(jì)算機(jī)、個(gè)人數(shù)字助理(PDA)、電話、或者具有處理能力的任何其它系統(tǒng)或設(shè)備。
圖2說(shuō)明了層次結(jié)構(gòu)200,其幫助描述本發(fā)明的原理并且無(wú)須處在任一特定的計(jì)算系統(tǒng)上。層次結(jié)構(gòu)200包括多個(gè)應(yīng)用201,包括應(yīng)用201A到201H,還有許多用橫向的省略號(hào)201I表示。這些應(yīng)用一般代表軟件應(yīng)用。軟件應(yīng)用一般通過(guò)使程序設(shè)計(jì)者起草源代碼而創(chuàng)建。于是,編譯程序把該源代碼編譯成(或解釋程序解釋該源代碼)計(jì)算機(jī)可執(zhí)行指令,這些指令可由處理器讀取并遵循。
面向?qū)ο蟮某绦蛟O(shè)計(jì)的一個(gè)好處在于它能把獨(dú)立構(gòu)造的組件結(jié)合到應(yīng)用中。組件是計(jì)算機(jī)可執(zhí)行指令的離散集合,在被執(zhí)行時(shí)實(shí)現(xiàn)一個(gè)或多個(gè)功能。組件可由其它軟件組件或應(yīng)用所調(diào)用。由于獨(dú)立構(gòu)造的組件可以僅僅通過(guò)一次函數(shù)調(diào)用被結(jié)合到應(yīng)用中,因此每次應(yīng)用要具有組件所提供的功能時(shí)無(wú)須重構(gòu)組件。因而,面向?qū)ο蟮某绦蛟O(shè)計(jì)使應(yīng)用程序設(shè)計(jì)者能結(jié)合他人的工作,從而使應(yīng)用程序設(shè)計(jì)者能將注意力更集中于應(yīng)用的更高級(jí)的特性,而不是限于已經(jīng)由他人解決的詳細(xì)操作中。作為重現(xiàn)設(shè)計(jì)和重新構(gòu)造組件的替代,應(yīng)用程序設(shè)計(jì)者僅需起草足夠的代碼使得應(yīng)用對(duì)組件作出適當(dāng)結(jié)構(gòu)的函數(shù)調(diào)用,并且使應(yīng)用可以正確地解釋從組件接收到的函數(shù)調(diào)用。組件設(shè)計(jì)者一般文檔化他們的規(guī)范,用于放置并接收函數(shù)調(diào)用以允許應(yīng)用設(shè)計(jì)者這樣做。
回過(guò)去參照?qǐng)D2,層次包括多個(gè)組件202,包括組件202A到202F,還有許多用橫向的省略號(hào)表示。這些組件202代表這樣的組件可以構(gòu)造它們以允許通過(guò)一組件創(chuàng)建機(jī)制、其后是重復(fù)的函數(shù)調(diào)用和返回機(jī)制,能夠結(jié)合到應(yīng)用中。
應(yīng)用201可以用若干可用的應(yīng)用框架204之一來(lái)構(gòu)造。應(yīng)用框架包括應(yīng)用框架204A到204D,還有許多用橫向的省略號(hào)204E表示。應(yīng)用框架包括一環(huán)境和一組工具,其便于構(gòu)造適當(dāng)功能的軟件應(yīng)用。應(yīng)用框架的示例包括WINDOWS Forms客戶端用戶界面(UI)程序設(shè)計(jì)框架、ASP.NET服務(wù)器端UI程序設(shè)計(jì)和HTTP框架、自由線程的控制臺(tái)應(yīng)用、嵌入SQL服務(wù)器中的應(yīng)用、以及現(xiàn)在開(kāi)發(fā)或可能在將來(lái)開(kāi)發(fā)的框架。應(yīng)用框架在本領(lǐng)域中通常也稱為“應(yīng)用模型”。
與通??捎玫慕M件相比,通??捎玫膽?yīng)用框架相對(duì)較少,而與通??捎玫膽?yīng)用相比,通常可用的組件相對(duì)較少。圖2中,為了說(shuō)明該現(xiàn)象,示出比組件202更多的應(yīng)用201,并且示出比應(yīng)用框架204更多的組件202,然而應(yīng)用201、組件202和應(yīng)用框架204決不是常規(guī)的。
層次結(jié)構(gòu)200還包括異步操作管理器203。如上所述,在涉及異步操作時(shí),不同的應(yīng)用框架有不同的線程和并發(fā)模型。異步操作是當(dāng)應(yīng)用層進(jìn)程正在進(jìn)行時(shí)在另一執(zhí)行線程或某片硬件處進(jìn)行到完成的操作。一些應(yīng)用框架對(duì)于在完成時(shí)異步操作執(zhí)行哪個(gè)線程沒(méi)有任何限制。其它應(yīng)用框架可能要求異步操作執(zhí)行特定的線程,該特定線程與用于呈現(xiàn)用戶界面的線程相同。還有其它應(yīng)用框架會(huì)要求執(zhí)行除了呈現(xiàn)用戶界面所使用的線程以外的線程。還有一些會(huì)要求異步操作執(zhí)行與啟動(dòng)異步操作的線程相同的線程。另外有一些對(duì)于以任何特定的線程返回沒(méi)有任何要求,但要求操作“串行化”;也就是,在任何給定的時(shí)間僅進(jìn)行一個(gè)操作。
通常,當(dāng)構(gòu)造一組件,該組件執(zhí)行更希望在后臺(tái)執(zhí)行的異步操作(比如文件下載等等)時(shí),組件自身需要包含特別對(duì)付應(yīng)用框架的線程和并發(fā)模型的代碼,所述應(yīng)用框架用于構(gòu)造其中可能結(jié)合該組件的硬件。因而,得花費(fèi)了很大的力氣來(lái)編寫(xiě)這種代碼,尤其當(dāng)組件可能被結(jié)合到正在使用多個(gè)應(yīng)用框架之一構(gòu)造的應(yīng)用中時(shí)。更糟糕的是,可能已構(gòu)造多個(gè)組件以尋址不同的框架。而且,即使為每個(gè)現(xiàn)有應(yīng)用框架編寫(xiě)的組件一般都不能工作在新引入的應(yīng)用框架中。
異步操作管理器203使用標(biāo)準(zhǔn)接口203A與組件202相接,使得組件無(wú)須特別尋址正在使用哪個(gè)應(yīng)用框架。相反,組件僅僅使用標(biāo)準(zhǔn)接口203A向異步操作管理器放置一標(biāo)準(zhǔn)函數(shù)調(diào)用。同樣,應(yīng)用框架204可以使用標(biāo)準(zhǔn)接口203B與異步操作管理器203通信。
如上所述,層次結(jié)構(gòu)200無(wú)須在相同的計(jì)算系統(tǒng)上實(shí)現(xiàn)。然而,直線211、212以及箭頭221、222和223說(shuō)明了應(yīng)用201D、組件202C、異步操作管理器203以及應(yīng)用框架204A之間的互連關(guān)系。為了說(shuō)明本發(fā)明的原理,在本說(shuō)明書(shū)的其余部分假定應(yīng)用201D、組件202C、異步操作管理器203以及應(yīng)用框架204A工作在相同的計(jì)算系統(tǒng)上,因此在系統(tǒng)內(nèi)存中例示。圖1中把這種計(jì)算系統(tǒng)的一例說(shuō)明為計(jì)算機(jī)120,然而任何計(jì)算系統(tǒng)都會(huì)滿足。
應(yīng)用201D用應(yīng)用框架204A構(gòu)造,如互連線212表示。組件202C被結(jié)合到應(yīng)用201D中,如互連線211所表示。在創(chuàng)建組件202C后,為了啟動(dòng)異步操作,組件202C經(jīng)由標(biāo)準(zhǔn)接口203A向異步操作管理器203放置一標(biāo)準(zhǔn)函數(shù)調(diào)用222。應(yīng)用框架204A或另一模塊可以通知異步組件(如箭頭221所表示)用于構(gòu)造應(yīng)用201D的硬件框架的標(biāo)識(shí),所述應(yīng)用201D中結(jié)合了請(qǐng)求異步操作的組件202C。在異步操作完成后,異步操作管理器203通知組件202C有關(guān)異步操作完成,如箭頭223所表示。
圖3說(shuō)明了一種方法300,它使至少一個(gè)組件以獨(dú)立于應(yīng)用框架的方式執(zhí)行異步操作,所述應(yīng)用框架用于構(gòu)造其中結(jié)合該組件的應(yīng)用。在圖2的環(huán)境中,執(zhí)行異步操作的組件是組件202C,而結(jié)合該組件的應(yīng)用是應(yīng)用201D。
方法300由異步操作管理器203實(shí)現(xiàn)。異步操作管理器從組件202C接收標(biāo)準(zhǔn)函數(shù)調(diào)用222(動(dòng)作301),然后響應(yīng)于所述標(biāo)準(zhǔn)函數(shù)調(diào)用而執(zhí)行一功能性的、面向結(jié)果的步驟,用于以適用于應(yīng)用框架的方式執(zhí)行異步操作,即使以獨(dú)立于應(yīng)用框架的方式發(fā)出函數(shù)調(diào)用(步驟310)。該步驟可以包括用于實(shí)現(xiàn)該結(jié)果的任何相應(yīng)的動(dòng)作。然而,在所述實(shí)施例中,步驟210包括相應(yīng)的非功能性動(dòng)作211、212、213和214。
尤其,異步操作管理器203檢測(cè)用于構(gòu)造應(yīng)用201D的應(yīng)用框架204A,所述應(yīng)用201D中結(jié)合了組件202C(動(dòng)作311)。這可以通過(guò)接收標(biāo)識(shí)應(yīng)用框架204A的通知221來(lái)完成。該動(dòng)作可以發(fā)生在異步操作執(zhí)行前或執(zhí)行期間的任何時(shí)刻。
異步操作管理器203還確定要響應(yīng)于函數(shù)調(diào)用而執(zhí)行的異步操作(動(dòng)作312)。然后,異步操作管理器203按照用于構(gòu)造應(yīng)用的應(yīng)用框架201D來(lái)執(zhí)行異步操作,所述應(yīng)用中結(jié)合了組件202C(動(dòng)作313)。接著,當(dāng)異步操作完成時(shí),異步組件以按照線程和并發(fā)模型的方式向組件202C發(fā)出一通知223(動(dòng)作314)。換言之,異步操作返回到適合所檢測(cè)的應(yīng)用框架的線程。根據(jù)線程和并發(fā)模型,這可以包括不加限制地返回到任何線程、返回到與呈現(xiàn)用戶界面所使用的線程相同或不同的線程、返回到與啟動(dòng)異步操作所使用的線程相同的線程、等等。
描述了本發(fā)明的原理后,現(xiàn)在將參照代碼示例來(lái)描述可以與異步操作管理器203相接的組件示例。示例組件包含可用于任何應(yīng)用框架的幾種方法,異步操作管理器203可以處理這些方法。下面還將提供異步操作管理器的代碼示例。
下面的組件代碼示例題為“WholesaleGeoduckPricer”,并且說(shuō)明了異步操作管理器203的組件用途,該管理器在該代碼示例中被稱為“AsyncOperationManager”,粗體的元件特別與AsyncOperationManager有關(guān)。首先注意到這里實(shí)現(xiàn)的CalculatePriceAsync()的版本采用稱為“狀態(tài)”的狀態(tài)對(duì)象。而且,“WholesaleGeoduckPricer”允許多個(gè)同時(shí)的操作在待命。AsyncOperationManager及有關(guān)的類直接從組件設(shè)計(jì)者的觀點(diǎn)出發(fā)來(lái)作出這些多個(gè)同時(shí)操作實(shí)現(xiàn)的管理。
下面給出組件代碼示例,為了簡(jiǎn)潔易懂添加了行編號(hào)。
<pre listing-type="program-listing">1.using System.ComponentModel;2.public class WholesaleGeoduckPricerComponent3.{4. public WholesaleGeoduckPricer()5. {6. onCompletedDelegate = new AsyncOperationPostDelegate(CalculateCompleted);7. }8. public void CalculatePriceAsync(float kilos,object state)9. {10. AsyncOperationasyncOp =AsyncOperationManager.CreateOperation(state);11. someMorePrimitiveMethodTakingDelegate(ki1os, asyncOp, some-delegate-constructed-from-MyCompletionMethod);12. }13. publicevent CalculatePriceCompletedEventHandler CalculatePriceCompleted;14. protected void OnCalculatePriceCompleted(CalculatePriceCompletedEventArgs e)15. {16.if(CalculatePriceCompleted!=null)17.{18. CalculatePriceCompleted(this,e);19.}20. }21. private void MyCompletionMethod(AsyncOperation asyncOp)22. {23. decimal price=...;24. Exception exception=...;25. bool cancelled=...;<dp n="d9"/>26. CalculatePriceCompletedEventArgse= new CalculatePriceCompletedEventArgs(price,exception,cancelled, asyncOp.UserSuppliedToken);27. asyncOp.OperationCompleted(onCompletedDelegate,e);28. }29. private void CalculateCompleted(AsyncOperation asyncOp, objectoperationState)30. {31. OnCalculatePriceCompleted((CalculatePriceCompletedEventArgs) operationState);32. }33. private AsyncOperationPostDelegate onCompletedDelegate;34.}35.public class CalculatePriceCompletedEventArgsAsyncCompletedEventArgs36.{37. public CalculatePriceCompletedEventArgs(decimal price,Exception e,bool cancelled,object state)base(e,cancelled,state)38. {39. this.price=price;40. }41. public decimal Price42. {43. get44. {45. RaiseExceptionIfNecessary();46. return price;47. }48. }49.}50.public delegate void CalculatePriceCompleteEventHandler(object sender, CalculatePriceCompleteEventArgs e);</pre>
該組件可以工作在任何應(yīng)用框架中。AsyncOperationManager和AsyncOperation表示了抽象點(diǎn),其中應(yīng)用框架在其下、組件在其上,底層的基本結(jié)構(gòu)確保了在正確的時(shí)刻安裝應(yīng)用框架適當(dāng)?shù)膶?duì)象。
行2到34定義了以C#語(yǔ)言編寫(xiě)的WholesaleGeoduckPricer組件,C#語(yǔ)言是一種微軟公司.NET語(yǔ)言。這個(gè)例子及所有其它例子都是以C#語(yǔ)言編寫(xiě)的。行2是組件的標(biāo)題行,并且把組件定義為公共(public)類。行4到7定義了一公共的WholesaleGeoduckPricer構(gòu)造程序。行6構(gòu)造了用于在完成時(shí)返回異步操作的委派。
行8到12定義了一種公共方法CalculatePriceAsync,其中定價(jià)所需要的期望的Geoduck的公斤數(shù)。同樣也把用戶狀態(tài)傳到該方法中。該用戶狀態(tài)用于區(qū)分關(guān)于CalculatePriceAsync的多個(gè)獨(dú)立調(diào)用。行10創(chuàng)建但尚未開(kāi)始異步操作,其實(shí)現(xiàn)是通過(guò)調(diào)用AsyncOperationManager.CreateOperation方法來(lái)創(chuàng)建AsyncOperation,標(biāo)識(shí)該異步操作的“生存時(shí)間”。用戶狀態(tài)被傳到CreateOperation中。該“生存時(shí)間”AsyncOperation轉(zhuǎn)到異步運(yùn)行的底層機(jī)制。該機(jī)制還接收一委派,用于在AsynchOperation完成時(shí)調(diào)用MyCompletionMethod()方法。最后,由于成功、失敗或取消,MyCompletionMethod()可以在任意的線程上被調(diào)用,并且把生存時(shí)間傳到其中。
該MyCompletionMethod建立了CalculatePriceCompletedEventArgs,然后在AsyncOperation上調(diào)用OperationCompleted,在方法委派中傳遞,以便在當(dāng)前應(yīng)用模型的正確線程/環(huán)境上運(yùn)行。該方法是CalculateCompleted()。
AsyncOperation.OperationCompleted()函數(shù)做以下兩件事確保在適當(dāng)?shù)木€程或并發(fā)環(huán)境中調(diào)用指定的回調(diào)函數(shù)(委派),以及有效地“結(jié)束”異步操作的生存時(shí)間。試圖在調(diào)用OperationCompleted以后使用AsyncOperation會(huì)引發(fā)一例外。當(dāng)上面內(nèi)容導(dǎo)致CalculateCompleted()時(shí),則處在正確的線程/環(huán)境,并且僅能從那里引發(fā)事件。
注意到這里可以支持多個(gè)待命的同步操作,因?yàn)锳syncOperation用調(diào)用來(lái)實(shí)現(xiàn),而不是被保存為組件中的單個(gè)實(shí)例數(shù)據(jù)。傳遞信息的另一種選擇是在該組件上維持一個(gè)生存時(shí)間的集合、并且檢取它們以調(diào)用OperationCompleted()、此后立即從集合中刪除它們。
這些內(nèi)容得出一種設(shè)計(jì),借此組件要求一種靜態(tài)方法AsyncOperationManager.CreateOperation()來(lái)為它創(chuàng)建一個(gè)新的AsyncOperation,以及用于通信的必要方法放開(kāi)該對(duì)象。同時(shí),CreateOperation()通過(guò)經(jīng)過(guò)注冊(cè)的工廠(factory)進(jìn)行調(diào)用而創(chuàng)建其對(duì)象,該注冊(cè)工廠的工作是為該線程的當(dāng)前應(yīng)用模型創(chuàng)建一個(gè)新的“生存時(shí)間”。
下面說(shuō)明了異步操作管理器203的公共可用的接口(方法和屬性),其中為了簡(jiǎn)潔而添加了行號(hào)<pre listing-type="program-listing">1.namespace System.ComponentModel2.{3. public class AsyncOperationManager4. {5. static AsyncOperation CreateOperation(object userSuppliedToken);6. static AsyncOperationFactory CurrentFactory7. {8. get;9. set;10. }11. static AsyncOperationFactory FreeThreadedFactory12. {13.get;14. }15. }16.}</pre>方法CreateOperation定義如下static AsyncOperation CreateOperation(object userSuppliedToken);方法CurrentFactory定義如下1.static AsyncOperationFactory CurrentFactory2.{3. get;4. set;5.}取得(get)和設(shè)置(set)方法影響了線程當(dāng)前的AsyncOperationFactory。該工廠用于創(chuàng)建實(shí)際的AsyncOperation。僅有應(yīng)用框架提供商調(diào)用這些方法。
下面定義了FreeThreadedFactory方法,這是一種創(chuàng)建總是在獨(dú)立線程上運(yùn)行的AsyncOperation的工廠1.static AsyncOperationFactory FreeThreadedFactory2.{3. get;4.}該方法訪問(wèn)用于創(chuàng)建自由線程的異步操作生存時(shí)間的工廠。
下面是使AsyncOperation引用上述代碼實(shí)例的類定義(為了簡(jiǎn)潔添加行號(hào))<pre listing-type="program-listing">1 public abstract class AsyncOperation2.{3. public AsyncOperation(object userSuppliedToken);4. pubic object UserSuppliedToken{get;}5. public void OperationCompleted(AsyncOperationPostDelegate d, object arg);6. public void Post(AsyncOperationPostDelegate d,object arg);7. protected abstract void OperationCompletedCore(AsyncOperationPostDelegate d,object arg);8. protected abstract voidPost(AsyncOperationPostDelegate d, object arg);9.}</pre>下面的VB.NET代碼說(shuō)明了該模式的“用途”。第一行構(gòu)造了一個(gè)新的WholesaleGeoduckPricer組件。第二行開(kāi)始CalculatePrice操作,因?yàn)樗钱惒竭M(jìn)行的因此被稱為CalculatePriceAsyn。最后,在結(jié)束處的函數(shù)是“完成處理器”,在定價(jià)操作完成后,其用函數(shù)的結(jié)果來(lái)調(diào)用該函數(shù)。注意到該完成函數(shù)是被異步調(diào)用的,并且在應(yīng)用正在運(yùn)行的正確的線程/環(huán)境上被調(diào)用(為了簡(jiǎn)潔添加行號(hào))。
1.WithEvents MyPricer as New WholesaleGeoduckPricer2.MyPricer.CalculatePriceAsync(3.4,Nothing)3.Sub Pricer_CalculatePriceCompleted(ByVal Sender as Object,ByVal e asCalculatePriceEventArgs)4. Handles MyPricer.CalculatePriceCompleted5. MessageBox.Show(“Price is”+e.Price);6.End Sub
因而,已經(jīng)描述了一種程序設(shè)計(jì)模型,其中可以以獨(dú)立于底層應(yīng)用框架的方式來(lái)構(gòu)造組件,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用。因而,本發(fā)明的原理能夠允許在構(gòu)造實(shí)現(xiàn)異步操作的組件時(shí)使軟件更有效的發(fā)展,因?yàn)榻M件設(shè)計(jì)者無(wú)須明確在組件自身中解決可能的底層應(yīng)用框架線程和并發(fā)模型。
本發(fā)明可以包含在其它特定形式中,而不背離其精神或基本特性。所述實(shí)施例應(yīng)被視作說(shuō)明性的而不是限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求指明,而不是由上述說(shuō)明書(shū)指明。其范圍內(nèi)應(yīng)包含所有變化,只要這些變化在權(quán)利要求等價(jià)物的意義和范圍內(nèi)。
權(quán)利要求
1.一種在包括一個(gè)或多個(gè)處理器的計(jì)算系統(tǒng)中使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品包括其上具有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)可讀媒質(zhì),所述指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)例示以下內(nèi)容按照特定應(yīng)用框架構(gòu)造的應(yīng)用;被結(jié)合到應(yīng)用中的組件,其中當(dāng)要執(zhí)行異步操作時(shí),組件被配置成以獨(dú)立于構(gòu)造應(yīng)用所使用的特定應(yīng)用框架的方式發(fā)出一標(biāo)準(zhǔn)函數(shù)調(diào)用;以及異步操作管理器,被配置成檢測(cè)構(gòu)造應(yīng)用所使用的特定應(yīng)用框架、接收標(biāo)準(zhǔn)函數(shù)調(diào)用、按照應(yīng)用框架的線程或并發(fā)模型執(zhí)行異步操作、以及當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知。
2.如權(quán)利要求1所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述計(jì)算機(jī)可執(zhí)行指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)還引發(fā)計(jì)算系統(tǒng)例示以下內(nèi)容應(yīng)用框架模塊,其被配置成通知異步操作管理器所述特定的應(yīng)用框架是用于構(gòu)造應(yīng)用的應(yīng)用框架,其中組件被結(jié)合到所述應(yīng)用中。
3.如權(quán)利要求1所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述異步操作管理器被配置成在適合特定應(yīng)用框架的線程或并發(fā)環(huán)境中發(fā)出所述通知。
4.如權(quán)利要求1所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述一個(gè)或多個(gè)計(jì)算機(jī)可讀媒質(zhì)是物理媒質(zhì)。
5.一種計(jì)算系統(tǒng),包括一個(gè)或多個(gè)處理器;系統(tǒng)存儲(chǔ)器,其中在系統(tǒng)存儲(chǔ)器中例示以下內(nèi)容按照特定應(yīng)用框架構(gòu)造的應(yīng)用;被結(jié)合到應(yīng)用中的組件,其中當(dāng)要執(zhí)行異步操作時(shí),組件被配置成以獨(dú)立于構(gòu)造應(yīng)用所使用的特定應(yīng)用框架的方式發(fā)出一標(biāo)準(zhǔn)函數(shù)調(diào)用;以及異步操作管理器,被配置成檢測(cè)構(gòu)造應(yīng)用所使用的特定應(yīng)用框架、接收標(biāo)準(zhǔn)函數(shù)調(diào)用、按照應(yīng)用框架的線程或并發(fā)模型執(zhí)行異步操作、以及當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知。
6.如權(quán)利要求5所述的計(jì)算系統(tǒng),其特征在于,所述系統(tǒng)存儲(chǔ)器上還具有應(yīng)用框架模塊,其被配置成通知異步操作管理器特定的應(yīng)用框架是用于構(gòu)造其中結(jié)合了組件的應(yīng)用的應(yīng)用框架。
7.如權(quán)利要求5所述的計(jì)算系統(tǒng),其特征在于,所述異步操作管理器被配置成在適合特定應(yīng)用框架的線程上發(fā)出所述通知。
8.在能執(zhí)行用應(yīng)用框架構(gòu)造的應(yīng)用的計(jì)算系統(tǒng)中,所述應(yīng)用結(jié)合一個(gè)或多個(gè)組件,一種使至少一個(gè)組件以獨(dú)立于應(yīng)用框架的方式執(zhí)行異步操作的方法,其中所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用,所述方法包括從組件接收標(biāo)準(zhǔn)函數(shù)調(diào)用的動(dòng)作,所述標(biāo)準(zhǔn)函數(shù)調(diào)用是以獨(dú)立于應(yīng)用框架的方式被發(fā)出的,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用;檢測(cè)構(gòu)造其中結(jié)合了組件的應(yīng)用所使用的應(yīng)用框架的動(dòng)作;確定要響應(yīng)于函數(shù)調(diào)用而執(zhí)行異步操作的動(dòng)作;按照應(yīng)用框架的線程或并發(fā)模型執(zhí)行要被執(zhí)行的異步操作的動(dòng)作,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用;以及當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知的動(dòng)作。
9.如權(quán)利要求8所述的方法,其特征在于,所述檢測(cè)構(gòu)造其中結(jié)合了組件的應(yīng)用所使用的應(yīng)用框架的動(dòng)作包括接收一通知的動(dòng)作,所述通知指示來(lái)自應(yīng)用框架模塊的應(yīng)用框架對(duì)于應(yīng)用框架是特定的。
10.如權(quán)利要求8所述的方法,其特征在于,所述當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知的動(dòng)作包括在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作。
11.如權(quán)利要求10所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在任何線程上發(fā)出所述通知的動(dòng)作。
12.如權(quán)利要求10所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在用于呈現(xiàn)用戶界面的線程上發(fā)出所述通知的動(dòng)作。
13.如權(quán)利要求10所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在不用于呈現(xiàn)用戶界面的線程上發(fā)出所述通知的動(dòng)作。
14.如權(quán)利要求10所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在與用于發(fā)出標(biāo)準(zhǔn)函數(shù)調(diào)用的線程相同的線程上發(fā)出所述通知的動(dòng)作。
15.如權(quán)利要求10所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括只要操作被串行化則在任何線程上發(fā)出所述通知的動(dòng)作,這是因?yàn)樵谶\(yùn)行來(lái)自應(yīng)用的代碼時(shí)不會(huì)有兩個(gè)線程同時(shí)活動(dòng)。
16.如權(quán)利要求8所述的方法,其特征在于,所述確定要執(zhí)行的異步操作的動(dòng)作包括檢測(cè)是否要響應(yīng)于所述一個(gè)或多個(gè)函數(shù)調(diào)用而執(zhí)行多個(gè)異步操作的動(dòng)作;所述方法還包括考慮到所述多個(gè)異步操作,使得應(yīng)用執(zhí)行在所述多個(gè)異步操作全部完成后繼續(xù)的動(dòng)作。
17.如權(quán)利要求8所述的方法,其特征在于,所述按照用于構(gòu)造其中結(jié)合了組件的應(yīng)用的應(yīng)用框架的線程和并發(fā)模型執(zhí)行異步操作的動(dòng)作包括運(yùn)行減少計(jì)算系統(tǒng)工作的一個(gè)或多個(gè)線程的動(dòng)作;以及在運(yùn)行減少計(jì)算系統(tǒng)工作的一個(gè)或多個(gè)線程的動(dòng)作后,運(yùn)行增加計(jì)算系統(tǒng)工作的一個(gè)或多個(gè)線程的動(dòng)作。
18.一種在能執(zhí)行用應(yīng)用框架構(gòu)造的應(yīng)用的計(jì)算系統(tǒng)中使用的計(jì)算機(jī)程序產(chǎn)品,所述應(yīng)用結(jié)合了一個(gè)或多個(gè)組件,所述計(jì)算機(jī)程序產(chǎn)品用于實(shí)現(xiàn)一種方法,使至少一個(gè)組件以獨(dú)立于應(yīng)用框架的方式執(zhí)行異步操作,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用,所述計(jì)算機(jī)程序產(chǎn)品包括其上具有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)可讀媒質(zhì),所述指令在被計(jì)算系統(tǒng)的一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行從組件接收標(biāo)準(zhǔn)函數(shù)調(diào)用的動(dòng)作,所述標(biāo)準(zhǔn)函數(shù)調(diào)用是以獨(dú)立于應(yīng)用框架的方式發(fā)出的,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用;檢測(cè)構(gòu)造其中結(jié)合了組件的應(yīng)用所使用的應(yīng)用框架的動(dòng)作;確定要響應(yīng)于函數(shù)調(diào)用而執(zhí)行異步操作的動(dòng)作;按照應(yīng)用框架的線程和并發(fā)模型執(zhí)行異步操作的動(dòng)作,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用;以及當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知的動(dòng)作。
19.如權(quán)利要求18所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,用于檢測(cè)構(gòu)造其中結(jié)合了組件的應(yīng)用所使用的應(yīng)用框架的計(jì)算機(jī)可執(zhí)行指令包括這樣的指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行接收一通知的動(dòng)作,所述通知指示來(lái)自應(yīng)用框架模塊的應(yīng)用框架對(duì)于應(yīng)用框架是特定的。
20.如權(quán)利要求18所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知的計(jì)算機(jī)可執(zhí)行指令包括這樣的計(jì)算機(jī)可執(zhí)行指令當(dāng)被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作。
21.如權(quán)利要求20所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的計(jì)算機(jī)可執(zhí)行指令包括這樣的計(jì)算機(jī)可執(zhí)行指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行在任何線程上發(fā)出所述通知的動(dòng)作。
22.如權(quán)利要求20所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的計(jì)算機(jī)可執(zhí)行指令包括這樣的計(jì)算機(jī)可執(zhí)行指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行在用于呈現(xiàn)用戶界面的線程上發(fā)出所述通知的動(dòng)作。
23.如權(quán)利要求20所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的計(jì)算機(jī)可執(zhí)行指令包括這樣的計(jì)算機(jī)可執(zhí)行指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行在不用于呈現(xiàn)用戶界面的線程上發(fā)出所述通知的動(dòng)作。
24.如權(quán)利要求20所述的計(jì)算機(jī)程序產(chǎn)品,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的計(jì)算機(jī)可執(zhí)行指令包括這樣的計(jì)算機(jī)可執(zhí)行指令在被一個(gè)或多個(gè)處理器執(zhí)行時(shí)引發(fā)計(jì)算系統(tǒng)執(zhí)行在與用于發(fā)出標(biāo)準(zhǔn)函數(shù)調(diào)用的線程相同的線程上發(fā)出所述通知的動(dòng)作。
25.在能執(zhí)行用應(yīng)用框架構(gòu)造的應(yīng)用的計(jì)算系統(tǒng)中,所述應(yīng)用結(jié)合一個(gè)或多個(gè)組件,一種使至少一個(gè)組件以獨(dú)立于應(yīng)用框架的方式執(zhí)行異步操作的方法,其中所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用,所述方法包括從組件接收標(biāo)準(zhǔn)函數(shù)調(diào)用的動(dòng)作,所述標(biāo)準(zhǔn)函數(shù)調(diào)用是以獨(dú)立于應(yīng)用框架的方式被發(fā)出的,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用;以及響應(yīng)于所述標(biāo)準(zhǔn)函數(shù)調(diào)以適合應(yīng)用框架的方式執(zhí)行異步操作的步驟,即使標(biāo)準(zhǔn)函數(shù)調(diào)用是以獨(dú)立于應(yīng)用框架的方式被發(fā)出的。
26.如權(quán)利要求25所述的方法,其特征在于,所述響應(yīng)于所述標(biāo)準(zhǔn)函數(shù)調(diào)用以適合應(yīng)用框架的方式執(zhí)行異步操作的步驟包括檢測(cè)構(gòu)造其中結(jié)合了組件的應(yīng)用所使用的應(yīng)用框架的動(dòng)作;確定要響應(yīng)于函數(shù)調(diào)用而執(zhí)行異步操作的動(dòng)作;按照應(yīng)用框架的線程或并發(fā)模型執(zhí)行異步操作的動(dòng)作,所述應(yīng)用框架用于構(gòu)造其中結(jié)合了組件的應(yīng)用;以及當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知的動(dòng)作。
27.如權(quán)利要求26所述的方法,其特征在于,所述檢測(cè)構(gòu)造其中結(jié)合了組件的應(yīng)用所使用的應(yīng)用框架的動(dòng)作包括接收一通知的動(dòng)作,所述通知指示來(lái)自應(yīng)用框架模塊的應(yīng)用框架對(duì)于應(yīng)用框架是特定的。
28.如權(quán)利要求26所述的方法,其特征在于,所述當(dāng)異步操作完成時(shí)以按照線程或并發(fā)模型的方式向組件發(fā)出一通知的動(dòng)作包括在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作。
29.如權(quán)利要求28所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在任何線程上發(fā)出所述通知的動(dòng)作。
30.如權(quán)利要求28所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在用于呈現(xiàn)用戶界面的線程上發(fā)出所述通知的動(dòng)作。
31.如權(quán)利要求28所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在不用于呈現(xiàn)用戶界面的線程上發(fā)出所述通知的動(dòng)作。
32.如權(quán)利要求28所述的方法,其特征在于,所述在適合所檢測(cè)的應(yīng)用框架的線程上發(fā)出所述通知的動(dòng)作包括在與用于發(fā)出標(biāo)準(zhǔn)函數(shù)調(diào)用的線程相同的線程上發(fā)出所述通知的動(dòng)作。
全文摘要
按照特定的應(yīng)用框架構(gòu)造一應(yīng)用。組件被結(jié)合到應(yīng)用中。當(dāng)要執(zhí)行異步操作時(shí),組件被配置成以獨(dú)立于構(gòu)造應(yīng)用所使用的特定應(yīng)用框架的方式發(fā)出一標(biāo)準(zhǔn)函數(shù)調(diào)用。異步操作管理器被配置成檢測(cè)構(gòu)造應(yīng)用所使用的特定應(yīng)用框架、接收標(biāo)準(zhǔn)函數(shù)調(diào)用、按照應(yīng)用框架的線程和并發(fā)模型執(zhí)行異步操作、以及當(dāng)異步操作完成時(shí)以按照線程和并發(fā)模型的方式向組件發(fā)出一通知。異步操作管理器可以通過(guò)從應(yīng)用框架自身接收通知或函數(shù)調(diào)用而確定應(yīng)用框架。
文檔編號(hào)G06F9/44GK1573700SQ200410048938
公開(kāi)日2005年2月2日 申請(qǐng)日期2004年6月11日 優(yōu)先權(quán)日2003年6月13日
發(fā)明者G·D·謝齊特, Y·E·克里斯騰森, M·J·馬魯切克, D·羅布斯曼 申請(qǐng)人:微軟公司