两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

嵌套任務(wù)的結(jié)果的編組的制作方法

文檔序號(hào):6356119閱讀:182來源:國知局
專利名稱:嵌套任務(wù)的結(jié)果的編組的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及嵌套任務(wù)的結(jié)果,尤其涉及嵌套任務(wù)的結(jié)果的編組。
背景技術(shù)
1.背景和相關(guān)技術(shù)計(jì)算機(jī)系統(tǒng)和相關(guān)技術(shù)影響社會(huì)的許多方面。的確,計(jì)算機(jī)系統(tǒng)處理信息的能力已轉(zhuǎn)變了人們生活和工作的方式。計(jì)算機(jī)系統(tǒng)現(xiàn)在通常執(zhí)行在計(jì)算機(jī)系統(tǒng)出現(xiàn)以前手動(dòng)執(zhí)行的許多任務(wù)(例如,文字處理、日程安排和會(huì)計(jì)等)。最近,計(jì)算機(jī)系統(tǒng)彼此耦合并耦合到其他電子設(shè)備以形成計(jì)算機(jī)系統(tǒng)和其他電子設(shè)備可以在其上傳輸電子數(shù)據(jù)的有線和無線計(jì)算機(jī)網(wǎng)絡(luò)。因此,許多計(jì)算任務(wù)的執(zhí)行分布在多個(gè)不同的計(jì)算機(jī)系統(tǒng)和/或多個(gè)不同的計(jì)算環(huán)境上。在一些計(jì)算環(huán)境中,任務(wù)被更明確地定義為表示應(yīng)用要執(zhí)行的操作的工作項(xiàng)。許多任務(wù)被配置以返回特定類型(例如,整數(shù)、字符串等等)的值來將信息傳送回執(zhí)行任務(wù)的應(yīng)用。例如,TasKTResultM任務(wù)<TResult>)是其操作返回類型TResult的值的任務(wù)。任務(wù)被嵌套在另一任務(wù)中也不是不普遍的。當(dāng)任務(wù)被嵌套時(shí),任務(wù)(外部任務(wù))的返回值類型可以是另一任務(wù)(內(nèi)部任務(wù))。例如,TasKTaskM任務(wù)〈任務(wù) >)是其操作返回類型Task 的值的任務(wù)。嵌套的任務(wù)也能被配置以返回進(jìn)一步的值。例如,TasKTasKTResult (任務(wù)〈任務(wù)〈TResult》)是其操作返回類型Task<TResult>(任務(wù)<TResult>)的值的任務(wù) (Task<TResult>又被配置以返回類型TResult的值)。各種不同的計(jì)算場景能生成嵌套的任務(wù)。不幸的是,嵌套的任務(wù)能引起容易被忽視和/或難以糾正的非預(yù)期的應(yīng)用行為(例如,隱錯(cuò))。例如,當(dāng)調(diào)用一(外部)任務(wù)時(shí),該(外部)任務(wù)能調(diào)用進(jìn)一步的(內(nèi)部)任務(wù)以創(chuàng)建任務(wù)的理想結(jié)果。然而,如果該進(jìn)一步的(內(nèi)部)任務(wù)需要花費(fèi)一些時(shí)間來完成,讓該進(jìn)一步的(內(nèi)部)任務(wù)異步完成使得(外部)任務(wù)不需要阻塞來等待結(jié)果是理想的。例如,考慮一外部任務(wù),該外部任務(wù)返回一人的朋友列表上的朋友數(shù)量的整數(shù)計(jì)數(shù)。該外部任務(wù)可以具有形式Task<int>(任務(wù)<int>)。在該外部任務(wù)內(nèi)部可以是對于存儲(chǔ)朋友列表的網(wǎng)絡(luò)數(shù)據(jù)庫的異步調(diào)用。由于對于網(wǎng)絡(luò)數(shù)據(jù)庫的調(diào)用是異步的,因此外部任務(wù)不阻塞并且其線程是釋放的。然而,該外部任務(wù)必須依然返回值,即使其在網(wǎng)絡(luò)數(shù)據(jù)庫調(diào)用之前完成并因此沒有朋友數(shù)量的計(jì)數(shù)。由此,該外部任務(wù)返回表示數(shù)據(jù)庫調(diào)用的完成的內(nèi)部任務(wù),其也具有形式Task<int>。由此,該外部任務(wù)實(shí)質(zhì)上被表示為Task<Task<int>> (任務(wù)〈任務(wù)<int》)。因此,訪問外部任務(wù)的結(jié)果返回內(nèi)部任務(wù)(即,TasKint ,其是對于將返回朋友數(shù)量的計(jì)數(shù)的項(xiàng)的引用。隨著異步任務(wù)的數(shù)量的增加,非預(yù)期的應(yīng)用行為的可能也增加。例如,API可包括用于異步地登錄Web服務(wù)(例如,社交網(wǎng)絡(luò)站點(diǎn))、檢索朋友列表以及向各個(gè)朋友發(fā)送電子郵件的功能。LogOn(登錄)方法采用用戶名和密碼,并且其返回表示登錄操作的 Task<TResult> (任務(wù)<TResult>)。當(dāng)?shù)卿洸僮魍瓿蓵r(shí),任務(wù)的結(jié)果將是herl^ken (用戶令牌)。例如public Task<UserToken>LogOn(string username, string password);GetFriendsList (獲得朋友列表)方法采用^erToken (用戶令牌),并且其返回表示朋友列表檢索操作的hsKTResult〉(任務(wù)〈TResult 。當(dāng)朋友列表檢索操作完成時(shí), 任務(wù)的結(jié)果將是FriendCollection (朋友集合)。例如public Task<FriendCollection>GetFriendList (UserToken userToken);SendMail (發(fā)送郵件)方法采用Friend(朋友),并且其返回表示電子郵件發(fā)送操作的Task (任務(wù))。例如public Task SendEmail(Friend friend, string subject, string body);用戶希望使用這些API和任務(wù)延續(xù)來寫代碼,任務(wù)延續(xù)被用以當(dāng)原始任務(wù)已經(jīng)完
成時(shí)調(diào)度任務(wù)。例如
1.var userToken = LogOn(user, pass);
2.var friends = userToken. ContinueWith(_ => GetFriendList (userToken.Result));
3.var emails = friends. ContinueWith(_ =>
4.{
5.var sentMails = new List<Task>();
6.foreach (var friend in friends.Result)
7.{
8.sentMails. Add(SendEmail(friend, subject, body));
9.}
10.return Task.Factory. ContinueWhenAll(
11.sentMails. ToArray (),tasks => Task. Wai tAl 1 (tasks));
12.});
13. emails. ContinueWith (— => Console. WriteLine ( “All emails sent"));雖然“.ContinueWith”被包括在第2行,但其指示當(dāng)外部任務(wù)完成時(shí)代碼繼續(xù)。由此,當(dāng)LogOn操作已經(jīng)異步完成時(shí),對于第2行GetFriendList的調(diào)用被調(diào)用以異步地檢索朋友列表。該調(diào)用將返回TasKFriendCollectionX任務(wù) < 朋友集合 >)以表示異步操作的結(jié)果。由于傳遞到第2行ContinueWith的代理中的代碼返回Task<FriendCollection>, "friends (朋友)”變量是 Task<Task<FriendCollection (任務(wù) < 任務(wù) < 朋友集合 )。friends (朋友)變量是Task<Task<FriendCollection》(任務(wù)〈任務(wù)〈朋友集合 >>)導(dǎo)致在 foreach 循環(huán)處的錯(cuò)誤,因?yàn)椤癴riends. Result”返回 Task<FriendCollection> (任務(wù) 〈朋友集合 >)而不是FriendCollection (朋友集合)。其他類似的問題發(fā)生在該代碼示例的其他行。這些和其他類似類型的編譯器錯(cuò)誤通常通過避免類型推導(dǎo)(即,不使用“var”關(guān)鍵字)來解決。然而,即使當(dāng)開發(fā)者意識(shí)到類型不匹配,其他邏輯必須依舊被編碼以解包 “friends (朋友)”任務(wù)使得其返回真實(shí)的FriendCollection (朋友集合)。編碼這樣的邏輯是非平凡的并且如果邏輯考慮異常、取消等是相對困難的。

發(fā)明內(nèi)容
本發(fā)明涉及用于編組嵌套的任務(wù)的結(jié)果的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。例如,本發(fā)明的實(shí)施例便于將一個(gè)任務(wù)的狀態(tài)編組到另一個(gè)任務(wù)。從調(diào)用邏輯接收對于包裝任務(wù)的調(diào)用。包裝任務(wù)具有由在包裝任務(wù)內(nèi)部包裝的被包裝的任務(wù)表示的結(jié)果。創(chuàng)建表示包裝任務(wù)和被包裝的任務(wù)的聚集異步操作的代理任務(wù)。該代理任務(wù)具有完成狀態(tài),該完成狀態(tài)至少指示聚集異步操作的完成狀態(tài)。該代理任務(wù)被返回到調(diào)用邏輯而不需要調(diào)用邏輯等待包裝任務(wù)或被包裝的任務(wù)的完成。確定聚集異步操作的完成狀態(tài)。確定聚集異步操作的完成狀態(tài)包括確定包裝任務(wù)的完成狀態(tài)。當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí),確定聚集異步操作的完成狀態(tài)也包括確定被包裝的任務(wù)的完成狀態(tài)。當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí),代理任務(wù)的完成狀態(tài)被設(shè)置為被包裝的任務(wù)的完成狀態(tài)?;蛘?,當(dāng)包裝任務(wù)的完成狀態(tài)指示被包裝的任務(wù)沒有趨向完成時(shí),代理任務(wù)的完成狀態(tài)被設(shè)置為包裝任務(wù)的完成狀態(tài)。在聚集異步操作的完成后,代理任務(wù)的完成狀態(tài)被傳送到調(diào)用邏輯以至少向調(diào)用邏輯指示聚集異步操作的完成狀態(tài)。提供本發(fā)明內(nèi)容是為了以精簡的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。本發(fā)明的附加特征和優(yōu)點(diǎn)將在以下描述中敘述,且其一部分根據(jù)本說明書將是顯而易見的,或可通過對本發(fā)明的實(shí)踐來獲知。本發(fā)明的特征和優(yōu)點(diǎn)可通過在所附權(quán)利要求書中特別指出的工具和組合來實(shí)現(xiàn)和獲得。本發(fā)明的這些和其他特征將通過以下描述和所附權(quán)利要求書變得更加顯而易見,或可通過對下文中所述的本發(fā)明的實(shí)踐來領(lǐng)會(huì)。附圖簡述為了描述可獲得本發(fā)明的上述和其它優(yōu)點(diǎn)和特征的方式,將通過參考附圖中示出的本發(fā)明的具體實(shí)施例來呈現(xiàn)以上簡要描述的本發(fā)明的更具體描述??梢岳斫猓@些附圖只描繪了本發(fā)明的各典型實(shí)施例,并且因此不被認(rèn)為是對其范圍的限制,將通過使用附圖并利用附加特征和細(xì)節(jié)來描述和解釋本發(fā)明,在附圖中圖IA示出了便于將一個(gè)任務(wù)的狀態(tài)編組到另一任務(wù)的示例計(jì)算機(jī)體系結(jié)構(gòu)。圖IB示出了來自圖IA的解包(unwrap)組件的更詳細(xì)的視圖。圖2示出了將一個(gè)任務(wù)的狀態(tài)編組到另一任務(wù)的示例方法的流程圖。圖3A和;3B示出了解包一任務(wù)的示例。
具體實(shí)施例方式本發(fā)明涉及用于編組嵌套的任務(wù)的結(jié)果的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。例如,本發(fā)明的實(shí)施例便于將一個(gè)任務(wù)的狀態(tài)編組到另一任務(wù)。從調(diào)用邏輯接收對于包裝任務(wù)的調(diào)用。包裝任務(wù)具有由在包裝任務(wù)內(nèi)包裝的被包裝的任務(wù)表示的結(jié)果。創(chuàng)建表示包裝任務(wù)和被包裝的任務(wù)的聚集異步操作的代理任務(wù)。該代理任務(wù)具有完成狀態(tài),該完成狀態(tài)至少指示聚集異步操作的完成狀態(tài)。一般而言,任務(wù)(包括包裝任務(wù)、被包裝的任務(wù)、以及代理任務(wù)中的任一)的完成狀態(tài)能是以下之一具有結(jié)果數(shù)據(jù)的趨向完成、具有異常數(shù)據(jù)的故障、或被取消。然而,其它完成狀態(tài)也是可能的。該代理任務(wù)被返回到調(diào)用邏輯而不需要調(diào)用邏輯等待包裝任務(wù)或被包裝的任務(wù)的完成。確定聚集異步操作的完成狀態(tài)。確定聚集異步操作的完成狀態(tài)包括確定包裝任務(wù)的完成狀態(tài)。當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí),確定聚集異步操作的完成狀態(tài)也包括確定被包裝的任務(wù)的完成狀態(tài)。當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí),代理任務(wù)的完成狀態(tài)被設(shè)置為被包裝的任務(wù)的完成狀態(tài)?;蛘?,當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)沒有趨向完成時(shí),代理任務(wù)的完成狀態(tài)被設(shè)置為包裝任務(wù)的完成狀態(tài)。在聚集異步操作的完成后,代理任務(wù)的完成狀態(tài)被傳送到調(diào)用邏輯以至少向調(diào)用邏輯指示聚集異步操作的完成狀態(tài)。本發(fā)明的各實(shí)施例可以包括或利用諸如,一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器等包括計(jì)算機(jī)硬件的專用或通用計(jì)算機(jī),這將在以下做出進(jìn)一步討論。本發(fā)明范圍內(nèi)的各實(shí)施例還包括用于承載或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計(jì)算機(jī)可讀介質(zhì)。 這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物理存儲(chǔ)介質(zhì)。承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施例可包括至少兩種完全不同的計(jì)算機(jī)可讀介質(zhì)計(jì)算機(jī)存儲(chǔ)介質(zhì)和傳輸介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲(chǔ)、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過網(wǎng)絡(luò)或另一通信連接(硬連線、無線、或硬連線或無線的組合)傳輸或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置并可由通用或?qū)S糜?jì)算機(jī)訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。此外,在到達(dá)各種計(jì)算機(jī)系統(tǒng)組件之后,計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動(dòng)轉(zhuǎn)移到計(jì)算機(jī)存儲(chǔ)介質(zhì)(或者相反)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳送到計(jì)算機(jī)系統(tǒng)RAM和/或計(jì)算機(jī)系統(tǒng)處的較不易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)。由此,應(yīng)當(dāng)理解,計(jì)算機(jī)存儲(chǔ)介質(zhì)可被包括在同樣(或甚至主要)利用傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。
計(jì)算機(jī)可執(zhí)行指令例如包括,當(dāng)在處理器處執(zhí)行時(shí)使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼、諸如匯編語言等中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語言描述了本主題,但可以理解的是,所附權(quán)利要求書中定義的主題不必限于上述特征或動(dòng)作。相反,上述特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)、路由器、交換機(jī)等等。本發(fā)明也可以在其中通過網(wǎng)絡(luò)鏈接(或者通過硬連線數(shù)據(jù)鏈路、無線數(shù)據(jù)鏈路,或者通過硬連線和無線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)踐。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。圖IA示出了便于將一個(gè)任務(wù)的狀態(tài)編組到另一任務(wù)的示例計(jì)算機(jī)體系結(jié)構(gòu)100。 參考

圖1A,計(jì)算機(jī)體系結(jié)構(gòu)100包括調(diào)用邏輯133、包裝任務(wù)111、以及解包組件101。包裝任務(wù)111進(jìn)一步包括被包裝的任務(wù)112。在計(jì)算機(jī)體系結(jié)構(gòu)100中描繪的各個(gè)組件能夠通過計(jì)算機(jī)系統(tǒng)總線相互連接。因此,組件能通過計(jì)算機(jī)系統(tǒng)總線相互通信。或者,在計(jì)算機(jī)體系結(jié)構(gòu)100內(nèi)描繪的組件中的一個(gè)或多個(gè)可通過諸如例如局域網(wǎng)(“LAN”)、廣域網(wǎng)(“WAN”)和甚至因特網(wǎng)等網(wǎng)絡(luò)(或作為網(wǎng)絡(luò)的一部分)彼此連接。 因此,所描繪的計(jì)算機(jī)系統(tǒng)中的每一個(gè)以及任何其他連接的計(jì)算機(jī)系統(tǒng)及其組件都可以創(chuàng)建消息相關(guān)數(shù)據(jù)并通過網(wǎng)絡(luò)交換消息相關(guān)數(shù)據(jù)(例如,網(wǎng)際協(xié)議(“IP”)數(shù)據(jù)報(bào)和利用IP 數(shù)據(jù)報(bào)的其他更高層協(xié)議,諸如傳輸控制協(xié)議(“TCP”)、超文本傳輸協(xié)議(“HTTP”)、簡單郵件傳輸協(xié)議(“SMTP”)等)。圖2示出了將一個(gè)任務(wù)的狀態(tài)編組到另一任務(wù)的示例方法200的流程圖。方法 200將參考計(jì)算機(jī)體系結(jié)構(gòu)100的組件和數(shù)據(jù)來描述。方法200包括從調(diào)用邏輯接收對于包裝任務(wù)的調(diào)用的動(dòng)作,包裝任務(wù)具有由在包裝任務(wù)內(nèi)包裝的被包裝的任務(wù)表示的結(jié)果(動(dòng)作201)。例如,包裝任務(wù)111能接收來自調(diào)用邏輯133的調(diào)用。包裝任務(wù)111的結(jié)果由被包裝的任務(wù)112表示。調(diào)用邏輯133可以是執(zhí)行代碼模塊、軟件組件等等的期望來自包裝任務(wù)111的執(zhí)行的結(jié)果的另一程序。方法200包括創(chuàng)建表示包裝任務(wù)以及被包裝的任務(wù)的聚集異步操作的代理任務(wù)的動(dòng)作,該代理任務(wù)具有至少指示聚集異步操作的完成狀態(tài)的完成狀態(tài)(動(dòng)作202)。例如, 在執(zhí)行包裝任務(wù)111期間,擴(kuò)展方法能調(diào)用解包組件101。解包組件101能創(chuàng)建表示包裝任務(wù)111和被包裝的任務(wù)112的聚集異步操作的代理任務(wù)。該代理任務(wù)具有完成狀態(tài),該完成狀態(tài)至少指示表示包裝任務(wù)111和被包裝的任務(wù)112的聚集異步操作的完成狀態(tài)。方法200包括將代理任務(wù)返回調(diào)用邏輯的動(dòng)作,代理任務(wù)被返回到調(diào)用邏輯而不需要調(diào)用邏輯等待包裝任務(wù)或被包裝的任務(wù)的完成(動(dòng)作203)。例如,解包組件101能將代理任務(wù)句柄132返回到調(diào)用邏輯133。代理任務(wù)句柄132能被返回到調(diào)用邏輯133而不需要調(diào)用邏輯133等待包裝任務(wù)111或被包裝的任務(wù)112的完成。方法200包括確定聚集異步操作的完成狀態(tài)的動(dòng)作(動(dòng)作204)。例如,解包組件 111能確定表示包裝任務(wù)111和被包裝的任務(wù)112的聚集異步操作的完成狀態(tài)。
圖IB示出解包組件101的更詳細(xì)的視圖。如圖IB中描繪的,解包組件101包括包裝任務(wù)狀態(tài)確定組件102、被包裝的任務(wù)狀態(tài)確定組件103、完成狀態(tài)確定組件104、以及空檢查器106。當(dāng)調(diào)用解包組件101時(shí),在包裝任務(wù)狀態(tài)確定組件102上采用繼續(xù)任務(wù)。包裝任務(wù)狀態(tài)確定組件102確定包裝任務(wù)的完成狀態(tài)。任務(wù)的完成狀態(tài)能包括狀態(tài)和可任選返回?cái)?shù)據(jù)。例如,任務(wù)的完成狀態(tài)可以是趨向完成(狀態(tài))、趨向完成(狀態(tài))和結(jié)果數(shù)據(jù)(返回?cái)?shù)據(jù))、故障(狀態(tài))和異常數(shù)據(jù)(返回?cái)?shù)據(jù))、或被取消(狀態(tài))。其它完成狀態(tài)也是可能的。例如,可以一包裝任務(wù)是hsKTResult〉(任務(wù)<TResult>),但具有空的結(jié)果值。 由此,包裝任務(wù)的正文不返回其原本應(yīng)該返回的Task (任務(wù)),而是返回空值。當(dāng)這種情況發(fā)生時(shí),存在多種如何處理的選項(xiàng),諸如使代理出故障或取消代理。當(dāng)包裝任務(wù)的狀態(tài)是被取消或具有異常數(shù)據(jù)的故障時(shí),包裝任務(wù)狀態(tài)確定組件 102將包裝任務(wù)的完成狀態(tài)傳遞給完成狀態(tài)確定組件104。在接收包裝任務(wù)的完成狀態(tài)后, 完成狀態(tài)確定組件104將代理任務(wù)的完成狀態(tài)設(shè)置為包裝任務(wù)的完成狀態(tài)。由此,如果包裝任務(wù)的完成狀態(tài)是被取消或具有異常數(shù)據(jù)的故障,完成狀態(tài)確定組件104對應(yīng)地將代理任務(wù)的完成狀態(tài)分別設(shè)置為被取消或具有異常數(shù)據(jù)的故障。另一方面,當(dāng)包裝任務(wù)的狀態(tài)是趨向具有結(jié)果數(shù)據(jù)的完成時(shí),包裝任務(wù)狀態(tài)確定組件102將包裝任務(wù)的完成狀態(tài)傳遞給被包裝的任務(wù)狀態(tài)確定組件102。在被包裝的任務(wù)狀態(tài)確定組件102上使用包裝任務(wù)的完成狀態(tài)來采用繼續(xù)任務(wù)。被包裝的任務(wù)狀態(tài)確定組件103確定被包裝的任務(wù)的完成狀態(tài)。被包裝的任務(wù)狀態(tài)確定組件103然后將被包裝的任務(wù)的完成狀態(tài)傳遞給完成狀態(tài)確定組件104。在接收被包裝的任務(wù)的完成狀態(tài)后,完成狀態(tài)確定組件104對應(yīng)地將代理任務(wù)的完成狀態(tài)設(shè)置為被包裝的任務(wù)的完成狀態(tài)。完成狀態(tài)確定組件104然后向調(diào)用邏輯輸出代理任務(wù)的完成狀態(tài)??諜z查器106檢查被包裝的任務(wù)以確定被包裝的任務(wù)是否是空。空的被包裝的任務(wù)的檢測導(dǎo)致代理任務(wù)的被取消的狀態(tài)。由此,當(dāng)包裝任務(wù)的完成狀態(tài)是被取消或故障時(shí),代理任務(wù)的完成狀態(tài)被設(shè)置為包裝任務(wù)的完成狀態(tài)。另一方面,當(dāng)包裝任務(wù)的完成狀態(tài)是趨向完成時(shí),代理任務(wù)的完成狀態(tài)被設(shè)置為被包裝的任務(wù)的完成狀態(tài)。因此,動(dòng)作204包括確定包裝任務(wù)的完成狀態(tài)的動(dòng)作(動(dòng)作205)。例如,解包組件 101能接收包括被包裝的任務(wù)112的包裝任務(wù)111。繼續(xù)任務(wù)113在包裝任務(wù)狀態(tài)確定組件102上被采用。包裝任務(wù)狀態(tài)確定組件102確定包裝任務(wù)111的完成狀態(tài)。當(dāng)包裝任務(wù)111的完成狀態(tài)是被取消時(shí),包裝任務(wù)狀態(tài)確定組件102向完成狀態(tài)確定組件104發(fā)送被取消114。類似地,當(dāng)包裝任務(wù)111的完成狀態(tài)是具有異常數(shù)據(jù)的故障時(shí),包裝任務(wù)狀態(tài)確定組件102向完成狀態(tài)確定組件104發(fā)送故障116和異常數(shù)據(jù)117。 另一方面,當(dāng)包裝任務(wù)111的完成狀態(tài)是趨向具有結(jié)果數(shù)據(jù)的完成時(shí),包裝任務(wù)狀態(tài)確定組件102向被包裝的任務(wù)狀態(tài)確定組件103發(fā)送趨向完成118和結(jié)果數(shù)據(jù)119。由此,包裝任務(wù)狀態(tài)確定組件102或者向完成狀態(tài)確定組件104發(fā)送被取消或故障之一,或者向被包裝的任務(wù)狀態(tài)確定組件103發(fā)送趨向完成。動(dòng)作204包括當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí)確定被包裝的任務(wù)的完成狀態(tài)的動(dòng)作(動(dòng)作206)。例如,繼續(xù)任務(wù)121在被包裝的任務(wù)狀態(tài)確定組件103 上被采用。包裝任務(wù)狀態(tài)確定組件103確定包裝任務(wù)112的完成狀態(tài)。當(dāng)被包裝的任務(wù)112的完成狀態(tài)是被取消時(shí),被包裝的任務(wù)狀態(tài)確定組件103可向完成狀態(tài)確定組件104發(fā)送被取消122。類似地,當(dāng)被包裝的任務(wù)112的完成狀態(tài)是具有異常數(shù)據(jù)的故障時(shí),被包裝的任務(wù)狀態(tài)確定組件103可向完成狀態(tài)確定組件104發(fā)送故障 123和異常數(shù)據(jù)124。同樣地,當(dāng)被包裝的任務(wù)113的完成狀態(tài)是趨向具有結(jié)果數(shù)據(jù)的完成時(shí),被包裝的任務(wù)狀態(tài)確定組件103可向完成狀態(tài)確定組件104發(fā)送趨向完成1 和結(jié)果數(shù)據(jù)127。由此,在適當(dāng)時(shí),被包裝的任務(wù)狀態(tài)確定組件103向完成狀態(tài)確定組件103發(fā)送被取消、故障、或趨向完成之一。方法200包括將代理任務(wù)的完成狀態(tài)設(shè)置為以下之一的動(dòng)作a)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)趨向完成時(shí),被包裝的任務(wù)的完成狀態(tài),或b)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)沒有趨向完成時(shí),包裝任務(wù)的完成狀態(tài)(動(dòng)作207)。例如,在從被包裝的任務(wù)狀態(tài)確定組件103接收到被取消、故障或趨向完成的完成狀態(tài)后,完成狀態(tài)確定組件104可將代理的完成狀態(tài)設(shè)置為包裝任務(wù)112的完成狀態(tài)。另一方面,在從包裝任務(wù)狀態(tài)確定組件102接收到被取消或故障的完成狀態(tài)后,完成狀態(tài)確定組件104可將代理的完成狀態(tài)設(shè)置為包裝任務(wù)111的完成狀態(tài)。一般地,當(dāng)包裝任務(wù)111的完成狀態(tài)是被取消、故障或趨向具有空結(jié)果的完成時(shí), 不使用被包裝的任務(wù)狀態(tài)確定組件103。方法200包括將代理任務(wù)的完成狀態(tài)傳送到調(diào)用邏輯以至少向調(diào)用邏輯指示聚集異步操作的完成狀態(tài)的動(dòng)作(動(dòng)作208)。例如,解包組件101能將完成狀態(tài)131傳送到調(diào)用邏輯133。完成狀態(tài)131指示表示包裝任務(wù)111和被包裝的任務(wù)112的聚集異步操作的完成狀態(tài)。本發(fā)明的某些實(shí)施例使用擴(kuò)展方法來將TasKTask〉(任務(wù) < 任務(wù) >)轉(zhuǎn)換為完全地表示包括異常、取消狀態(tài)等等的原始嵌套的任務(wù)的Task(任務(wù))。例如,圖3A描繪了將 TasKTaskM任務(wù)〈任務(wù) >)轉(zhuǎn)換為Task(任務(wù))的示例。如描繪的,被包裝的任務(wù)303是在包裝任務(wù)302內(nèi)被包裝的。包裝任務(wù)302和被包裝的任務(wù)303是對于解包組件301的輸入。解包組件301將包裝任務(wù)302和被包裝的任務(wù)303轉(zhuǎn)換為代表任務(wù)304。代表任務(wù)304 完全地表示被包裝的任務(wù)303。類似地,本發(fā)明的其他實(shí)施例使用擴(kuò)展方法來將TasKTasKTResult (任務(wù) < 任務(wù)〈TResult )轉(zhuǎn)換為完全地表示包括異常、取消狀態(tài)等等的原始嵌套的任務(wù)的 Task<TResult> (任務(wù)〈TResult 。例如,圖 3B 描繪了將 Task<Task<TResult>> (任務(wù) < 任務(wù)〈TResult》)轉(zhuǎn)換為Task<TResult>(任務(wù)〈TResult 的示例。如描繪的,被包裝的任務(wù)313是在包裝任務(wù)312內(nèi)被包裝的。包裝任務(wù)312和被包裝的任務(wù)313是對于解包組件 311的輸入。解包組件311將包裝任務(wù)312和被包裝的任務(wù)313轉(zhuǎn)換為代表任務(wù)314。代表任務(wù)314完全地表示被包裝的任務(wù)313。本發(fā)明的實(shí)施例包括結(jié)合繼續(xù)Task(任務(wù))使用TaskCompletionSource<TResult> (任務(wù)完成源〈TResult 對象來將一個(gè)任務(wù)完成狀態(tài)編組到另一任務(wù)。由此,嵌套的任務(wù)的完成狀態(tài)能被流到能作為代理用于進(jìn)一步計(jì)算的新的非嵌套任務(wù)。能定義方法來實(shí)現(xiàn)本發(fā)明的實(shí)施例。實(shí)質(zhì)上能使用任何編程術(shù)語和樣式來定義方法,諸如例如,C++模板、Java類等等。使用C#術(shù)語和樣式,方法能被定義為如下public static Task Unwrap (this Task〈Task>task);public static Task <TResult>Unwrap〈TResult> (this Task〈Task〈TResult>>task);在某些實(shí)施例中,使用擴(kuò)展方法而不是普通實(shí)例方法。使用擴(kuò)展方法幫助確保通過合適類型(例如,分別為Task<Task>(任務(wù) < 任務(wù) 和Task<Task<TResult》(任務(wù)< 任務(wù)〈TResult》))的對象來調(diào)用Unwrap (解包)。以下偽代碼能被用以解包I^asKTasKTResult》(任務(wù)〈任務(wù)〈TResult》)。用于解包TasKTask〉(任務(wù) < 任務(wù) >)的代碼以類似的方式運(yùn)作。
public static Task<TResult> Unwrap<TResult>(this Task<Task<TResult>>
權(quán)利要求
1.一種在包括一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)處的用于將一個(gè)任務(wù)的狀態(tài)編組到另一個(gè)任務(wù)的方法,所述方法包括從調(diào)用邏輯(13 接收對于包裝任務(wù)(111)的調(diào)用的動(dòng)作,包裝任務(wù)(111)具有由在包裝任務(wù)(111)內(nèi)包裝的被包裝的任務(wù)(112)表示的結(jié)果;創(chuàng)建表示包裝任務(wù)(111)以及被包裝的任務(wù)(112)的聚集異步操作的代理任務(wù)的動(dòng)作,所述代理任務(wù)具有至少指示聚集異步操作的完成狀態(tài)的完成狀態(tài)(131);將代理任務(wù)(13 返回調(diào)用邏輯(133)的動(dòng)作,代理任務(wù)(13 被返回到調(diào)用邏輯 (133)而不需要調(diào)用邏輯(133)等待包裝任務(wù)(111)或被包裝的任務(wù)(112)的完成;確定聚集異步操作的完成狀態(tài)的動(dòng)作,包括確定包裝任務(wù)(111)的完成狀態(tài)的動(dòng)作;以及當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí)確定被包裝的任務(wù)(112)的完成狀態(tài)的動(dòng)作;將代理任務(wù)的完成狀態(tài)(131)設(shè)置為以下之一的動(dòng)作a)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)趨向完成時(shí),被包裝的任務(wù)(11 的完成狀態(tài),或b)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)沒有趨向完成時(shí),包裝任務(wù)(111)的完成狀態(tài);以及將代理任務(wù)的完成狀態(tài)(131)傳送到調(diào)用邏輯(133)以至少向調(diào)用邏輯(13 指示聚集異步操作的完成狀態(tài)的動(dòng)作。
2.如權(quán)利要求1所述的方法,其中確定聚集異步操作的完成狀態(tài)的動(dòng)作包括基于包裝任務(wù)和被包裝的任務(wù)的完成狀態(tài)均為趨向完成、確定聚集異步操作的完成狀態(tài)為趨向完成的動(dòng)作。
3.如權(quán)利要求2所述的方法,其中設(shè)置代理任務(wù)的完成狀態(tài)的動(dòng)作包括指示聚集異步操作趨向完成的動(dòng)作。
4.如權(quán)利要求2所述的方法,其特征在于,進(jìn)一步包括從被包裝的任務(wù)產(chǎn)生對于代理任務(wù)的結(jié)果數(shù)據(jù)。
5.如權(quán)利要求4所述的方法,其中將代理任務(wù)的完成狀態(tài)傳送到調(diào)用邏輯的動(dòng)作包括將被包裝的任務(wù)的結(jié)果數(shù)據(jù)與聚集異步操作的完成狀態(tài)一起傳送到調(diào)用邏輯的動(dòng)作。
6.如權(quán)利要求1所述的方法,其中確定聚集異步操作的完成狀態(tài)的動(dòng)作包括基于包裝任務(wù)和被包裝的任務(wù)之一被導(dǎo)致包裝任務(wù)和被包裝的任務(wù)之一停止操作的外部動(dòng)作取消、 確定聚集異步操作的完成狀態(tài)為被取消的動(dòng)作。
7.如權(quán)利要求6所述的方法,其中設(shè)置代理任務(wù)的完成狀態(tài)的動(dòng)作包括指示聚集異步操作的完成狀態(tài)為被取消以傳送聚集異步操作被外部動(dòng)作停止的動(dòng)作。
8.如權(quán)利要求1所述的方法,其中確定聚集異步操作的完成狀態(tài)的動(dòng)作包括基于包裝任務(wù)和被包裝的任務(wù)之一中的內(nèi)部故障從而導(dǎo)致包裝任務(wù)和被包裝的任務(wù)之一停止操作、 確定聚集異步操作的完成狀態(tài)為故障的動(dòng)作。
9.如權(quán)利要求8所述的方法,其中設(shè)置代理任務(wù)的完成狀態(tài)的動(dòng)作包括指示聚集異步操作故障的動(dòng)作。
10.如權(quán)利要求8所述的方法,其特征在于,進(jìn)一步包括生成與包裝任務(wù)和被包裝的任務(wù)之一的內(nèi)部故障相對應(yīng)的異常數(shù)據(jù)的動(dòng)作。
11.如權(quán)利要求10所述的方法,其中將代理任務(wù)的完成狀態(tài)返回到調(diào)用任務(wù)的動(dòng)作包括將異常數(shù)據(jù)與聚集異步操作的完成狀態(tài)一起返回到調(diào)用邏輯的動(dòng)作。
12.如權(quán)利要求1所述的方法,其中從調(diào)用邏輯接收對于包裝任務(wù)的調(diào)用的動(dòng)作包括接收對于格式Task<Task>的任務(wù)的調(diào)用的動(dòng)作;以及其中將代理任務(wù)的完成狀態(tài)返回到調(diào)用邏輯的動(dòng)作包括返回格式Task的代表任務(wù)的完成狀態(tài)的動(dòng)作。
13.如權(quán)利要求1所述的方法,其中從調(diào)用邏輯接收對于包裝任務(wù)的調(diào)用的動(dòng)作包括接收對于格式TasKTasKTResult 的任務(wù)的調(diào)用的動(dòng)作;以及其中將代理任務(wù)的完成狀態(tài)返回到調(diào)用邏輯的動(dòng)作包括返回格式 Task<Task<TResult 的代表任務(wù)的完成狀態(tài)的動(dòng)作。
14.一種供在計(jì)算機(jī)系統(tǒng)處使用的計(jì)算機(jī)程序產(chǎn)品,所述計(jì)算機(jī)程序產(chǎn)品用于實(shí)現(xiàn)一種將一個(gè)任務(wù)的狀態(tài)編組到另一個(gè)任務(wù)的方法,所述計(jì)算機(jī)程序產(chǎn)品包括其上存儲(chǔ)有計(jì)算機(jī)可執(zhí)行指令的一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)介質(zhì),所述指令在處理器處執(zhí)行時(shí)使得所述計(jì)算機(jī)系統(tǒng)執(zhí)行所述方法,所述方法包括以下從調(diào)用邏輯(13 接收對于包裝任務(wù)(111)的調(diào)用,包裝任務(wù)(111)具有由在包裝任務(wù)(111)內(nèi)包裝的被包裝的任務(wù)(112)表示的結(jié)果;創(chuàng)建表示包裝任務(wù)(111)以及被包裝的任務(wù)(11 的聚集異步操作的代理任務(wù),所述代理任務(wù)具有至少指示聚集異步操作的完成狀態(tài)的完成狀態(tài)(131);將代理任務(wù)(13 返回調(diào)用邏輯(133),代理任務(wù)(13 被返回到調(diào)用邏輯(13 而不需要調(diào)用邏輯(133)等待包裝任務(wù)(111)或被包裝的任務(wù)(112)的完成; 確定聚集異步操作的完成狀態(tài),包括 確定包裝任務(wù)(111)的完成狀態(tài);以及當(dāng)包裝任務(wù)的完成狀態(tài)指示包裝任務(wù)趨向完成時(shí)確定被包裝的任務(wù)(112)的完成狀態(tài);將代理任務(wù)的完成狀態(tài)(131)設(shè)置為以下之一 a)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)趨向完成時(shí),被包裝的任務(wù)(11 的完成狀態(tài),或b)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)沒有趨向完成時(shí),包裝任務(wù)(111)的完成狀態(tài);以及將代理任務(wù)的完成狀態(tài)(131)傳送到調(diào)用邏輯(133)以至少向調(diào)用邏輯(13 指示聚集異步操作的完成狀態(tài)。
15.一種計(jì)算機(jī)系統(tǒng),所述計(jì)算機(jī)系統(tǒng)包括 系統(tǒng)存儲(chǔ)器;一個(gè)或多個(gè)處理器;以及一個(gè)或多個(gè)具有其上存儲(chǔ)的表示調(diào)用邏輯(133)、包裝任務(wù)(111)以及解包組件(101) 的計(jì)算機(jī)可讀指令的計(jì)算機(jī)存儲(chǔ)介質(zhì),其中包裝任務(wù)(111)進(jìn)一步包裝被包裝的任務(wù) (112),調(diào)用邏輯(133)被配置以 調(diào)用包裝任務(wù)(111);從解包組件(101)接收對于代理任務(wù)的句柄(132);接收代理任務(wù)的完成狀態(tài)(131),代理任務(wù)的完成狀態(tài)(131)指示表示包裝任務(wù)(111) 和被包裝的任務(wù)(112)的聚集異步操作的完成狀態(tài);解包組件(101)進(jìn)一步包括包裝任務(wù)狀態(tài)確定組件(102)、被包裝的任務(wù)狀態(tài)確定組件(103)、完成狀態(tài)確定組件(104)、以及空檢查器(106),其中解包組件被配置以 接收包裝任務(wù)(111); 創(chuàng)建代理任務(wù);將對于代理任務(wù)的句柄(13 返回調(diào)用邏輯(133),代理任務(wù)被返回到調(diào)用邏輯而不需要調(diào)用邏輯等待包裝任務(wù)或被包裝的任務(wù)的完成; 確定聚集異步操作的完成狀態(tài),包括包裝任務(wù)狀態(tài)確定組件(10 確定包裝任務(wù)(111)的完成狀態(tài)(114,116); 空檢查器(106)確定被包裝的任務(wù)(112)不是空;以及當(dāng)包裝任務(wù)(111)的完成狀態(tài)指示包裝任務(wù)(111)趨向完成并且被包裝的任務(wù)(112) 不是空時(shí),被包裝的任務(wù)狀態(tài)確定組件(10 確定被包裝的任務(wù)(112)的完成狀態(tài)(122, 123,126);完成狀態(tài)確定組件(104)將代理任務(wù)的完成狀態(tài)(131)設(shè)置為以下之一 a)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)趨向完成時(shí),被包裝的任務(wù)的完成狀態(tài),或b)當(dāng)包裝任務(wù)的完成狀態(tài)指示該包裝任務(wù)沒有趨向完成時(shí),包裝任務(wù)的完成狀態(tài);以及完成狀態(tài)確定組件將代理任務(wù)的完成狀態(tài)(131)傳送到調(diào)用邏輯(133)以至少向調(diào)用邏輯(13 指示聚集異步操作的完成狀態(tài)。
全文摘要
本發(fā)明涉及用于嵌套任務(wù)的結(jié)果的編組的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品。解包方法能被用以減少任務(wù)嵌套的層級并確保在任務(wù)之間編組合適的結(jié)果。能使用代理任務(wù)以表示包裝任務(wù)和被包裝的任務(wù)的聚集異步操作。該代理任務(wù)具有完成狀態(tài),該完成狀態(tài)至少指示聚集異步操作的完成狀態(tài)。聚集異步操作的完成狀態(tài)是從包裝任務(wù)和被包裝的任務(wù)的一個(gè)或多個(gè)完成狀態(tài)中確定并設(shè)置的。代理任務(wù)的完成狀態(tài)能被傳送到調(diào)用邏輯以向調(diào)用邏輯指示聚集異步操作的完成狀態(tài)。
文檔編號(hào)G06F9/46GK102193822SQ20111006330
公開日2011年9月21日 申請日期2011年3月7日 優(yōu)先權(quán)日2010年3月8日
發(fā)明者D·S·謝哈, J·E·霍格, J·J·達(dá)菲, S·H·托布 申請人:微軟公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
北宁市| 陆丰市| 枝江市| 元江| 德令哈市| 富裕县| 丰镇市| 且末县| 贵州省| 得荣县| 泉州市| 绩溪县| 澜沧| 辛集市| 厦门市| 梁山县| 招远市| 内丘县| 通许县| 黄浦区| 灵石县| 陕西省| 青神县| 阳信县| 治县。| 蓬溪县| 高陵县| 资溪县| 县级市| 明溪县| 扶风县| 绵竹市| 彭泽县| 彰武县| 富民县| 北碚区| 稻城县| 潜山县| 泾阳县| 淳安县| 西安市|