CN102193822B - 用于嵌套任务的结果的编组的方法和系统 - Google Patents

用于嵌套任务的结果的编组的方法和系统 Download PDF

Info

Publication number
CN102193822B
CN102193822B CN201110063301.5A CN201110063301A CN102193822B CN 102193822 B CN102193822 B CN 102193822B CN 201110063301 A CN201110063301 A CN 201110063301A CN 102193822 B CN102193822 B CN 102193822B
Authority
CN
China
Prior art keywords
task
completion status
packaging
packaged
action
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201110063301.5A
Other languages
English (en)
Other versions
CN102193822A (zh
Inventor
S·H·托布
J·E·霍格
J·J·达菲
D·S·谢哈
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN102193822A publication Critical patent/CN102193822A/zh
Application granted granted Critical
Publication of CN102193822B publication Critical patent/CN102193822B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及用于嵌套任务的结果的编组的方法、系统和计算机程序产品。解包方法能被用以减少任务嵌套的层级并确保在任务之间编组合适的结果。能使用代理任务以表示包装任务和被包装的任务的聚集异步操作。该代理任务具有完成状态,该完成状态至少指示聚集异步操作的完成状态。聚集异步操作的完成状态是从包装任务和被包装的任务的一个或多个完成状态中确定并设置的。代理任务的完成状态能被传送到调用逻辑以向调用逻辑指示聚集异步操作的完成状态。

Description

用于嵌套任务的结果的编组的方法和系统
相关申请的交叉引用
不适用。
技术领域
本发明涉及嵌套任务的结果,尤其涉及嵌套任务的结果的编组。
背景技术
1.背景和相关技术
计算机系统和相关技术影响社会的许多方面。的确,计算机系统处理信息的能力已转变了人们生活和工作的方式。计算机系统现在通常执行在计算机系统出现以前手动执行的许多任务(例如,文字处理、日程安排和会计等)。最近,计算机系统彼此耦合并耦合到其他电子设备以形成计算机系统和其他电子设备可以在其上传输电子数据的有线和无线计算机网络。因此,许多计算任务的执行分布在多个不同的计算机系统和/或多个不同的计算环境上。
在一些计算环境中,任务被更明确地定义为表示应用要执行的操作的工作项。许多任务被配置以返回特定类型(例如,整数、字符串等等)的值来将信息传送回执行任务的应用。例如,Task<TResult>(任务<TResult>)是其操作返回类型TResult的值的任务。任务被嵌套在另一任务中也不是不普遍的。当任务被嵌套时,任务(外部任务)的返回值类型可以是另一任务(内部任务)。例如,Task<Task>(任务<任务>)是其操作返回类型Task的值的任务。嵌套的任务也能被配置以返回进一步的值。例如,Task<Task<TResult>>(任务<任务<TResult>>)是其操作返回类型Task<TResult>(任务<TResult>)的值的任务(Task<TResult>又被配置以返回类型TResult的值)。
各种不同的计算场景能生成嵌套的任务。不幸的是,嵌套的任务能引起容易被忽视和/或难以纠正的非预期的应用行为(例如,隐错)。
例如,当调用一(外部)任务时,该(外部)任务能调用进一步的(内部)任务以创建任务的理想结果。然而,如果该进一步的(内部)任务需要花费一些时间来完成,让该进一步的(内部)任务异步完成使得(外部)任务不需要阻塞来等待结果是理想的。
例如,考虑一外部任务,该外部任务返回一人的朋友列表上的朋友数量的整数计数。该外部任务可以具有形式Task<int>(任务<int>)。在该外部任务内部可以是对于存储朋友列表的网络数据库的异步调用。由于对于网络数据库的调用是异步的,因此外部任务不阻塞并且其线程是释放的。然而,该外部任务必须依然返回值,即使其在网络数据库调用之前完成并因此没有朋友数量的计数。由此,该外部任务返回表示数据库调用的完成的内部任务,其也具有形式Task<int>。由此,该外部任务实质上被表示为Task<Task<int>>(任务<任务<int>>)。因此,访问外部任务的结果返回内部任务(即,Task<int>),其是对于将返回朋友数量的计数的项的引用。
随着异步任务的数量的增加,非预期的应用行为的可能也增加。例如,API可包括用于异步地登录Web服务(例如,社交网络站点)、检索朋友列表以及向各个朋友发送电子邮件的功能。LogOn(登录)方法采用用户名和密码,并且其返回表示登录操作的Task<TResult>(任务<TResult>)。当登录操作完成时,任务的结果将是UserToken(用户令牌)。例如:
public Task<UserToken>LogOn(string username,string password);
GetFriendsList(获得朋友列表)方法采用UserToken(用户令牌),并且其返回表示朋友列表检索操作的Task<TResult>(任务<TResult>)。当朋友列表检索操作完成时,任务的结果将是FriendCollection(朋友集合)。例如:
public Task<FriendCollection>GetFriendList(UserToken userToken);
SendMail(发送邮件)方法采用Friend(朋友),并且其返回表示电子邮件发送操作的Task(任务)。例如:
public Task SendEmail(Friend friend,string subject,string body);
用户希望使用这些API和任务延续来写代码,任务延续被用以当原始任务已经完成时调度任务。例如:
虽然“.ContinueWith”被包括在第2行,但其指示当外部任务完成时代码继续。由此,当LogOn操作已经异步完成时,对于第2行GetFriendList的调用被调用以异步地检索朋友列表。该调用将返回Task<FriendCollection>(任务<朋友集合>)以表示异步操作的结果。由于传递到第2行ContinueWith的代理中的代码返回Task<FriendCollection>,“friends(朋友)”变量是Task<Task<FriendCollection>>(任务<任务<朋友集合>>)。friends(朋友)变量是Task<Task<FriendCollection>>(任务<任务<朋友集合>>)导致在foreach循环处的错误,因为“friends.Result”返回Task<FriendCollection>(任务<朋友集合>)而不是FriendCollection(朋友集合)。其他类似的问题发生在该代码示例的其他行。
这些和其他类似类型的编译器错误通常通过避免类型推导(即,不使用“var”关键字)来解决。然而,即使当开发者意识到类型不匹配,其他逻辑必须依旧被编码以解包“friends(朋友)”任务使得其返回真实的FriendCollection(朋友集合)。编码这样的逻辑是非平凡的并且如果逻辑考虑异常、取消等是相对困难的。
发明内容
本发明涉及用于编组嵌套的任务的结果的方法、系统和计算机程序产品。例如,本发明的实施例便于将一个任务的状态编组到另一个任务。从调用逻辑接收对于包装任务的调用。包装任务具有由在包装任务内部包装的被包装的任务表示的结果。
创建表示包装任务和被包装的任务的聚集异步操作的代理任务。该代理任务具有完成状态,该完成状态至少指示聚集异步操作的完成状态。该代理任务被返回到调用逻辑而不需要调用逻辑等待包装任务或被包装的任务的完成。
确定聚集异步操作的完成状态。确定聚集异步操作的完成状态包括确定包装任务的完成状态。当包装任务的完成状态指示包装任务趋向完成时,确定聚集异步操作的完成状态也包括确定被包装的任务的完成状态。
当包装任务的完成状态指示包装任务趋向完成时,代理任务的完成状态被设置为被包装的任务的完成状态。或者,当包装任务的完成状态指示包装任务没有趋向完成时,代理任务的完成状态被设置为包装任务的完成状态。在聚集异步操作的完成后,代理任务的完成状态被传送到调用逻辑以至少向调用逻辑指示聚集异步操作的完成状态。
提供本发明内容是为了以精简的形式介绍将在以下具体实施方式中进一步描述的一些概念。本发明内容不旨在标识出所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。
本发明的附加特征和优点将在以下描述中叙述,且其一部分根据本说明书将是显而易见的,或可通过对本发明的实践来获知。本发明的特征和优点可通过在所附权利要求书中特别指出的工具和组合来实现和获得。本发明的这些和其他特征将通过以下描述和所附权利要求书变得更加显而易见,或可通过对下文中所述的本发明的实践来领会。
附图简述
为了描述可获得本发明的上述和其它优点和特征的方式,将通过参考附图中示出的本发明的具体实施例来呈现以上简要描述的本发明的更具体描述。可以理解,这些附图只描绘了本发明的各典型实施例,并且因此不被认为是对其范围的限制,将通过使用附图并利用附加特征和细节来描述和解释本发明,在附图中:
图1A示出了便于将一个任务的状态编组到另一任务的示例计算机体系结构。
图1B示出了来自图1A的解包(unwrap)组件的更详细的视图。
图2示出了将一个任务的状态编组到另一任务的示例方法的流程图。
图3A和3B示出了解包一任务的示例。
具体实施方式
本发明涉及用于编组嵌套的任务的结果的方法、系统和计算机程序产品。例如,本发明的实施例便于将一个任务的状态编组到另一任务。从调用逻辑接收对于包装任务的调用。包装任务具有由在包装任务内包装的被包装的任务表示的结果。
创建表示包装任务和被包装的任务的聚集异步操作的代理任务。该代理任务具有完成状态,该完成状态至少指示聚集异步操作的完成状态。一般而言,任务(包括包装任务、被包装的任务、以及代理任务中的任一)的完成状态能是以下之一:具有结果数据的趋向完成、具有异常数据的故障、或被取消。然而,其它完成状态也是可能的。该代理任务被返回到调用逻辑而不需要调用逻辑等待包装任务或被包装的任务的完成。
确定聚集异步操作的完成状态。确定聚集异步操作的完成状态包括确定包装任务的完成状态。当包装任务的完成状态指示包装任务趋向完成时,确定聚集异步操作的完成状态也包括确定被包装的任务的完成状态。
当包装任务的完成状态指示包装任务趋向完成时,代理任务的完成状态被设置为被包装的任务的完成状态。或者,当包装任务的完成状态指示包装任务没有趋向完成时,代理任务的完成状态被设置为包装任务的完成状态。在聚集异步操作的完成后,代理任务的完成状态被传送到调用逻辑以至少向调用逻辑指示聚集异步操作的完成状态。
本发明的各实施例可以包括或利用诸如,一个或多个处理器和系统存储器等包括计算机硬件的专用或通用计算机,这将在以下做出进一步讨论。本发明范围内的各实施例还包括用于承载或存储计算机可执行指令和/或数据结构的物理和其他计算机可读介质。这样的计算机可读介质可以是可由通用或专用计算机系统访问的任何可用介质。存储计算机可执行指令的计算机可读介质是物理存储介质。承载计算机可执行指令的计算机可读介质是传输介质。由此,作为示例而非限制,本发明的各实施例可包括至少两种完全不同的计算机可读介质:计算机存储介质和传输介质。
计算机存储介质包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储或其他磁存储设备、或可用于存储计算机可执行指令或数据结构形式的所需程序代码装置且可由通用或专用计算机访问的任何其他介质。
“网络”被定义为允许在计算机系统和/或模块和/或其他电子设备之间传输电子数据的一个或多个数据链路。当信息通过网络或另一通信连接(硬连线、无线、或硬连线或无线的组合)传输或提供给计算机时,该计算机将该连接适当地视为传输介质。传输介质可包括可用于携带计算机可执行指令或数据结构形式的所需程序代码装置并可由通用或专用计算机访问的网络和/或数据链路。上述的组合也应被包括在计算机可读介质的范围内。
此外,在到达各种计算机系统组件之后,计算机可执行指令或数据结构形式的程序代码装置可从传输介质自动转移到计算机存储介质(或者相反)。例如,通过网络或数据链路接收到的计算机可执行指令或数据结构可被缓存在网络接口模块(例如,“NIC”)内的RAM中,然后最终被传送到计算机系统RAM和/或计算机系统处的较不易失性的计算机存储介质。由此,应当理解,计算机存储介质可被包括在同样(或甚至主要)利用传输介质的计算机系统组件中。
计算机可执行指令例如包括,当在处理器处执行时使通用计算机、专用计算机、或专用处理设备执行某一功能或某组功能的指令和数据。计算机可执行指令可以是例如二进制代码、诸如汇编语言等中间格式指令、或甚至源代码。尽管用结构特征和/或方法动作专用的语言描述了本主题,但可以理解的是,所附权利要求书中定义的主题不必限于上述特征或动作。相反,上述特征和动作是作为实现权利要求的示例形式而公开的。
本领域的技术人员将理解,本发明可以在具有许多类型的计算机系统配置的网络计算环境中实践,这些计算机系统配置包括个人计算机、台式计算机、膝上型计算机、消息处理器、手持式设备、多处理器系统、基于微处理器的或可编程消费电子设备、网络PC、小型计算机、大型计算机、移动电话、PDA、寻呼机、路由器、交换机等等。本发明也可以在其中通过网络链接(或者通过硬连线数据链路、无线数据链路,或者通过硬连线和无线数据链路的组合)的本地和远程计算机系统两者都执行任务的分布式系统环境中实践。在分布式系统环境中,程序模块可以位于本地和远程存储器存储设备中。
图1A示出了便于将一个任务的状态编组到另一任务的示例计算机体系结构100。参考图1A,计算机体系结构100包括调用逻辑133、包装任务111、以及解包组件101。包装任务111进一步包括被包装的任务112。在计算机体系结构100中描绘的各个组件能够通过计算机系统总线相互连接。因此,组件能通过计算机系统总线相互通信。
或者,在计算机体系结构100内描绘的组件中的一个或多个可通过诸如例如局域网(“LAN”)、广域网(“WAN”)和甚至因特网等网络(或作为网络的一部分)彼此连接。因此,所描绘的计算机系统中的每一个以及任何其他连接的计算机系统及其组件都可以创建消息相关数据并通过网络交换消息相关数据(例如,网际协议(“IP”)数据报和利用IP数据报的其他更高层协议,诸如传输控制协议(“TCP”)、超文本传输协议(“HTTP”)、简单邮件传输协议(“SMTP”)等)。
图2示出了将一个任务的状态编组到另一任务的示例方法200的流程图。方法200将参考计算机体系结构100的组件和数据来描述。
方法200包括从调用逻辑接收对于包装任务的调用的动作,包装任务具有由在包装任务内包装的被包装的任务表示的结果(动作201)。例如,包装任务111能接收来自调用逻辑133的调用。包装任务111的结果由被包装的任务112表示。调用逻辑133可以是执行代码模块、软件组件等等的期望来自包装任务111的执行的结果的另一程序。
方法200包括创建表示包装任务以及被包装的任务的聚集异步操作的代理任务的动作,该代理任务具有至少指示聚集异步操作的完成状态的完成状态(动作202)。例如,在执行包装任务111期间,扩展方法能调用解包组件101。解包组件101能创建表示包装任务111和被包装的任务112的聚集异步操作的代理任务。该代理任务具有完成状态,该完成状态至少指示表示包装任务111和被包装的任务112的聚集异步操作的完成状态。
方法200包括将代理任务返回调用逻辑的动作,代理任务被返回到调用逻辑而不需要调用逻辑等待包装任务或被包装的任务的完成(动作203)。例如,解包组件101能将代理任务句柄132返回到调用逻辑133。代理任务句柄132能被返回到调用逻辑133而不需要调用逻辑133等待包装任务111或被包装的任务112的完成。
方法200包括确定聚集异步操作的完成状态的动作(动作204)。例如,解包组件111能确定表示包装任务111和被包装的任务112的聚集异步操作的完成状态。
图1B示出解包组件101的更详细的视图。如图1B中描绘的,解包组件101包括包装任务状态确定组件102、被包装的任务状态确定组件103、完成状态确定组件104、以及空检查器106。当调用解包组件101时,在包装任务状态确定组件102上采用继续任务。包装任务状态确定组件102确定包装任务的完成状态。任务的完成状态能包括状态和可任选返回数据。例如,任务的完成状态可以是:趋向完成(状态)、趋向完成(状态)和结果数据(返回数据)、故障(状态)和异常数据(返回数据)、或被取消(状态)。其它完成状态也是可能的。
例如,可以一包装任务是Task<TResult>(任务<TResult>),但具有空的结果值。由此,包装任务的正文不返回其原本应该返回的Task(任务),而是返回空值。当这种情况发生时,存在多种如何处理的选项,诸如使代理出故障或取消代理。
当包装任务的状态是被取消或具有异常数据的故障时,包装任务状态确定组件102将包装任务的完成状态传递给完成状态确定组件104。在接收包装任务的完成状态后,完成状态确定组件104将代理任务的完成状态设置为包装任务的完成状态。由此,如果包装任务的完成状态是被取消或具有异常数据的故障,完成状态确定组件104对应地将代理任务的完成状态分别设置为被取消或具有异常数据的故障。
另一方面,当包装任务的状态是趋向具有结果数据的完成时,包装任务状态确定组件102将包装任务的完成状态传递给被包装的任务状态确定组件103。在被包装的任务状态确定组件103上使用包装任务的完成状态来采用继续任务。
被包装的任务状态确定组件103确定被包装的任务的完成状态。被包装的任务状态确定组件103然后将被包装的任务的完成状态传递给完成状态确定组件104。在接收被包装的任务的完成状态后,完成状态确定组件104对应地将代理任务的完成状态设置为被包装的任务的完成状态。
完成状态确定组件104然后向调用逻辑输出代理任务的完成状态。
空检查器106检查被包装的任务以确定被包装的任务是否是空。空的被包装的任务的检测导致代理任务的被取消的状态。
由此,当包装任务的完成状态是被取消或故障时,代理任务的完成状态被设置为包装任务的完成状态。另一方面,当包装任务的完成状态是趋向完成时,代理任务的完成状态被设置为被包装的任务的完成状态。
因此,动作204包括确定包装任务的完成状态的动作(动作205)。例如,解包组件101能接收包括被包装的任务112的包装任务111。继续任务113在包装任务状态确定组件102上被采用。包装任务状态确定组件102确定包装任务111的完成状态。
当包装任务111的完成状态是被取消时,包装任务状态确定组件102向完成状态确定组件104发送被取消114。类似地,当包装任务111的完成状态是具有异常数据的故障时,包装任务状态确定组件102向完成状态确定组件104发送故障116和异常数据117。另一方面,当包装任务111的完成状态是趋向具有结果数据的完成时,包装任务状态确定组件102向被包装的任务状态确定组件103发送趋向完成118和结果数据119。由此,包装任务状态确定组件102或者向完成状态确定组件104发送被取消或故障之一,或者向被包装的任务状态确定组件103发送趋向完成。
动作204包括当包装任务的完成状态指示包装任务趋向完成时确定被包装的任务的完成状态的动作(动作206)。例如,继续任务121在被包装的任务状态确定组件103上被采用。包装任务状态确定组件103确定包装任务112的完成状态。
当被包装的任务112的完成状态是被取消时,被包装的任务状态确定组件103可向完成状态确定组件104发送被取消122。类似地,当被包装的任务112的完成状态是具有异常数据的故障时,被包装的任务状态确定组件103可向完成状态确定组件104发送故障123和异常数据124。同样地,当被包装的任务113的完成状态是趋向具有结果数据的完成时,被包装的任务状态确定组件103可向完成状态确定组件104发送趋向完成126和结果数据127。由此,在适当时,被包装的任务状态确定组件103向完成状态确定组件103发送被取消、故障、或趋向完成之一。
方法200包括将代理任务的完成状态设置为以下之一的动作:a)当包装任务的完成状态指示该包装任务趋向完成时,被包装的任务的完成状态,或b)当包装任务的完成状态指示该包装任务没有趋向完成时,包装任务的完成状态(动作207)。例如,在从被包装的任务状态确定组件103接收到被取消、故障或趋向完成的完成状态后,完成状态确定组件104可将代理的完成状态设置为包装任务112的完成状态。另一方面,在从包装任务状态确定组件102接收到被取消或故障的完成状态后,完成状态确定组件104可将代理的完成状态设置为包装任务111的完成状态。
一般地,当包装任务111的完成状态是被取消、故障或趋向具有空结果的完成时,不使用被包装的任务状态确定组件103。
方法200包括将代理任务的完成状态传送到调用逻辑以至少向调用逻辑指示聚集异步操作的完成状态的动作(动作208)。例如,解包组件101能将完成状态131传送到调用逻辑133。完成状态131指示表示包装任务111和被包装的任务112的聚集异步操作的完成状态。
本发明的某些实施例使用扩展方法来将Task<Task>(任务<任务>)转换为完全地表示包括异常、取消状态等等的原始嵌套的任务的Task(任务)。例如,图3A描绘了将Task<Task>(任务<任务>)转换为Task(任务)的示例。如描绘的,被包装的任务303是在包装任务302内被包装的。包装任务302和被包装的任务303是对于解包组件301的输入。解包组件301将包装任务302和被包装的任务303转换为代表任务304。代表任务304完全地表示被包装的任务303。
类似地,本发明的其他实施例使用扩展方法来将Task<Task<TResult>>(任务<任务<TResult>>)转换为完全地表示包括异常、取消状态等等的原始嵌套的任务的Task<TResult>(任务<TResult>)。例如,图3B描绘了将Task<Task<TResult>>(任务<任务<TResult>>)转换为Task<TResult>(任务<TResult>)的示例。如描绘的,被包装的任务313是在包装任务312内被包装的。包装任务312和被包装的任务313是对于解包组件311的输入。解包组件311将包装任务312和被包装的任务313转换为代表任务314。代表任务314完全地表示被包装的任务313。
本发明的实施例包括结合继续Task(任务)使用TaskCompletionSource<TResult>(任务完成源<TResult>)对象来将一个任务完成状态编组到另一任务。由此,嵌套的任务的完成状态能被流到能作为代理用于进一步计算的新的非嵌套任务。
能定义方法来实现本发明的实施例。实质上能使用任何编程术语和样式来定义方法,诸如例如,C++模板、Java类等等。使用C#术语和样式,方法能被定义为如下:
public static Task Unwrap(this Task<Task>task);
public static Task<TResult>Unwrap<TResult>(this Task<Task<TResult>>task);
在某些实施例中,使用扩展方法而不是普通实例方法。使用扩展方法帮助确保通过合适类型(例如,分别为Task<Task>(任务<任务>)和Task<Task<TResult>>(任务<任务<TResult>>))的对象来调用Unwrap(解包)。
以下伪代码能被用以解包Task<Task<TResult>>(任务<任务<TResult>>)。用于解包Task<Task>(任务<任务>)的代码以类似的方式运作。
public static Task<TResult>Unwrap<TResult>(this Task<Task<TResult>>task)
在伪代码示例中,创建TaskCompletionSource<TResult>(任务完成源<TResult>),并且其成员Task(任务)最终从方法返回。使用继续Task(任务)来设置返回的Task(任务)。首先,为包装Task(任务)调度继续。如果包装Task(任务)是被取消或故障,状态被编组到返回的Task(任务),并且过程结束。如果是RanToCompletion(趋向完成),检测被包装的Task(任务)。如果被包装的Task(任务)是空,那么返回的Task(任务)是被取消。否则,为被包装的Task(任务)调度继续以将其最终状态(被取消、故障+异常数据、或趋向完成+结果)编组到返回的Task(任务)。
使用解包扩展方法能减少非预期的程序行为。以下伪代码实例使用解包以帮助确保在任务之间编组正确的结果。
在该伪代码示例中,解包扩展方法在行2和12被使用。例如,行2的解包方法确保GetFriendList(获得朋友列表)返回Task<FriendCollection>(任务<朋友集合>)而不是Task<Task<FriendCollection>(任务<任务<朋友集合>)。因此,在行6的foreach循环处,“friends.Result”(朋友.结果)合适地返回FriendCollection(朋友集合)(而不是Task<FriendCollection>(任务<朋友集合>))。
因此,解包方法被用以减少任务嵌套的层级并确保在任务之间编组合适的结果,例如,从Task<Task<TResult>>(任务<任务<TResult>>)到Task<TResult>(任务<TResult>)或Task<Task>(任务<任务>)到Task(任务)。解包方法也能被多次应用以减少多层嵌套任务的层级。例如,对于Task<Task<Task<Task>>>t(任务<任务<任务<任务>>>t),能使用t.Unwrap().Unwrap().Unwrap()(t.解包().解包().解包())来移除嵌套的多个层级,将结果减少到一个Task(任务)。
能使用代理任务以表示包装任务和被包装的任务的聚集异步操作。该代理任务具有完成状态,该完成状态至少指示聚集异步操作的完成状态。聚集异步操作的完成状态是从包装任务和被包装的任务的一个或多个完成状态中确定并设置的。代理任务的完成状态能被传送到调用逻辑以向调用逻辑指示聚集异步操作的完成状态。
本发明可具体化为其它具体形式而不背离其精神或本质特征。所描述的实施例在所有方面都应被认为仅是说明性而非限制性的。从而,本发明的范围由所附权利要求书而非前述描述指示。落入权利要求书的等效方案的含义和范围内的所有改变应被权利要求书的范围所涵盖。

Claims (15)

1.一种在包括一个或多个处理器和系统存储器的计算机系统处的用于将一个任务的状态编组到另一个任务的方法,所述方法包括:
从调用逻辑(133)接收对于包装任务(111)的调用的动作,包装任务(111)具有由在包装任务(111)内包装的被包装的任务(112)表示的结果;
创建表示包装任务(111)以及被包装的任务(112)的聚集异步操作的代理任务的动作,所述代理任务具有至少指示聚集异步操作的完成状态的完成状态(131);
将代理任务(132)返回调用逻辑(133)的动作,代理任务(132)被返回到调用逻辑(133)而不需要调用逻辑(133)等待包装任务(111)或被包装的任务(112)的完成;
确定聚集异步操作的完成状态的动作,包括:
确定包装任务(111)的完成状态的动作;以及
当包装任务的完成状态指示包装任务趋向完成时确定被包装的任务(112)的完成状态的动作;
将代理任务的完成状态(131)设置为以下之一的动作:a)当包装任务的完成状态指示该包装任务趋向完成时,被包装的任务(112)的完成状态,或b)当包装任务的完成状态指示该包装任务没有趋向完成时,包装任务(111)的完成状态;以及
将代理任务的完成状态(131)传送到调用逻辑(133)以至少向调用逻辑(133)指示聚集异步操作的完成状态的动作。
2.如权利要求1所述的方法,其中确定聚集异步操作的完成状态的动作包括基于包装任务和被包装的任务的完成状态均为趋向完成、确定聚集异步操作的完成状态为趋向完成的动作。
3.如权利要求2所述的方法,其中设置代理任务的完成状态的动作包括指示聚集异步操作趋向完成的动作。
4.如权利要求2所述的方法,其特征在于,进一步包括从被包装的任务产生对于代理任务的结果数据。
5.如权利要求4所述的方法,其中将代理任务的完成状态传送到调用逻辑的动作包括将被包装的任务的结果数据与聚集异步操作的完成状态一起传送到调用逻辑的动作。
6.如权利要求1所述的方法,其中确定聚集异步操作的完成状态的动作包括基于包装任务和被包装的任务之一被导致包装任务和被包装的任务之一停止操作的外部动作取消、确定聚集异步操作的完成状态为被取消的动作。
7.如权利要求6所述的方法,其中设置代理任务的完成状态的动作包括指示聚集异步操作的完成状态为被取消以传送聚集异步操作被外部动作停止的动作。
8.如权利要求1所述的方法,其中确定聚集异步操作的完成状态的动作包括基于包装任务和被包装的任务之一中的内部故障从而导致包装任务和被包装的任务之一停止操作、确定聚集异步操作的完成状态为故障的动作。
9.如权利要求8所述的方法,其中设置代理任务的完成状态的动作包括指示聚集异步操作故障的动作。
10.如权利要求8所述的方法,其特征在于,进一步包括生成与包装任务和被包装的任务之一的内部故障相对应的异常数据的动作。
11.如权利要求10所述的方法,其中将代理任务的完成状态返回到调用逻辑的动作包括将异常数据与聚集异步操作的完成状态一起返回到调用逻辑的动作。
12.如权利要求1所述的方法,其中从调用逻辑接收对于包装任务的调用的动作包括接收对于格式Task<Task>的任务的调用的动作;以及
其中将代理任务的完成状态返回到调用逻辑的动作包括返回格式Task的代表任务的完成状态的动作。
13.如权利要求1所述的方法,其中从调用逻辑接收对于包装任务的调用的动作包括接收对于格式Task<Task<TResult>>的任务的调用的动作;以及
其中将代理任务的完成状态返回到调用逻辑的动作包括返回格式Task<TResult>的代表任务的完成状态的动作。
14.一种在包括一个或多个处理器和系统存储器的计算机系统处的用于将一个任务的状态编组到另一个任务的系统,所述系统包括:
用于从调用逻辑(133)接收对于包装任务(111)的调用的装置,包装任务(111)具有由在包装任务(111)内包装的被包装的任务(112)表示的结果;
用于创建表示包装任务(111)以及被包装的任务(112)的聚集异步操作的代理任务的装置,所述代理任务具有至少指示聚集异步操作的完成状态的完成状态(131);
用于将代理任务(132)返回调用逻辑(133)的装置,代理任务(132)被返回到调用逻辑(133)而不需要调用逻辑(133)等待包装任务(111)或被包装的任务(112)的完成;
用于确定聚集异步操作的完成状态的装置,包括:
用于确定包装任务(111)的完成状态的装置;以及
用于当包装任务的完成状态指示包装任务趋向完成时确定被包装的任务(112)的完成状态的装置;
用于将代理任务的完成状态(131)设置为以下之一的装置:a)当包装任务的完成状态指示该包装任务趋向完成时,被包装的任务(112)的完成状态,或b)当包装任务的完成状态指示该包装任务没有趋向完成时,包装任务(111)的完成状态;以及
用于将代理任务的完成状态(131)传送到调用逻辑(133)以至少向调用逻辑(133)指示聚集异步操作的完成状态的装置。
15.一种在包括一个或多个处理器和系统存储器的计算机系统处的用于将一个任务的状态编组到另一个任务的方法,所述计算机系统还包括一个或多个具有其上存储的表示调用逻辑(133)、包装任务(111)以及解包组件(101)的计算机可读指令的计算机存储介质,其中包装任务(111)进一步包装被包装的任务(112),解包组件(101)进一步包括包装任务状态确定组件(102)、被包装的任务状态确定组件(103)、完成状态确定组件(104)、以及空检查器(106),所述方法包括:
调用逻辑(133)调用包装任务(111);
调用逻辑(133)从解包组件(101)接收对于代理任务的句柄(132);
调用逻辑(133)接收代理任务的完成状态(131),代理任务的完成状态(131)指示表示包装任务(111)和被包装的任务(112)的聚集异步操作的完成状态;
解包组件(101)接收包装任务(111);
解包组件(101)创建代理任务;
解包组件(101)将对于代理任务的句柄(132)返回调用逻辑(133),代理任务被返回到调用逻辑而不需要调用逻辑等待包装任务或被包装的任务的完成;
解包组件(101)确定聚集异步操作的完成状态,包括:
包装任务状态确定组件(102)确定包装任务(111)的完成状态(114,116);
空检查器(106)确定被包装的任务(112)不是空;以及
当包装任务(111)的完成状态指示包装任务(111)趋向完成并且被包装的任务(112)不是空时,被包装的任务状态确定组件(103)确定被包装的任务(112)的完成状态(122,123,126);
完成状态确定组件(104)将代理任务的完成状态(131)设置为以下之一:a)当包装任务的完成状态指示该包装任务趋向完成时,被包装的任务的完成状态,或b)当包装任务的完成状态指示该包装任务没有趋向完成时,包装任务的完成状态;以及
完成状态确定组件将代理任务的完成状态(131)传送到调用逻辑(133)以至少向调用逻辑(133)指示聚集异步操作的完成状态。
CN201110063301.5A 2010-03-08 2011-03-07 用于嵌套任务的结果的编组的方法和系统 Active CN102193822B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/719,700 2010-03-08
US12/719,700 US8392922B2 (en) 2010-03-08 2010-03-08 Marshaling results of nested tasks

Publications (2)

Publication Number Publication Date
CN102193822A CN102193822A (zh) 2011-09-21
CN102193822B true CN102193822B (zh) 2015-08-26

Family

ID=44532390

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110063301.5A Active CN102193822B (zh) 2010-03-08 2011-03-07 用于嵌套任务的结果的编组的方法和系统

Country Status (2)

Country Link
US (1) US8392922B2 (zh)
CN (1) CN102193822B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8806451B2 (en) * 2011-06-16 2014-08-12 Microsoft Corporation Monad based cloud computing
US9846597B2 (en) * 2013-03-13 2017-12-19 Microsoft Technology Licensing, Llc Durable program execution
CN107038025B (zh) * 2016-09-28 2020-04-07 阿里巴巴集团控股有限公司 基于soa架构的系统调用方法及装置
CN110879756B (zh) * 2019-10-31 2023-10-17 深圳市泰洲科技有限公司 协作流程异常处理方法、装置、计算机设备及存储介质
CN111611058A (zh) * 2020-05-21 2020-09-01 北京明略软件系统有限公司 任务执行方法、装置及电子设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009041801A2 (en) * 2007-09-27 2009-04-02 Mimos Berhad Trusted node for grid computing

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2329559A1 (en) * 2000-12-22 2002-06-22 Ibm Canada Limited-Ibm Canada Limitee Method and apparatus for generating serialization code for representing a model in different type systems
US6701311B2 (en) * 2001-02-07 2004-03-02 International Business Machines Corporation Customer self service system for resource search and selection
US7249357B2 (en) * 2001-08-20 2007-07-24 Silicon Graphics, Inc. Transparent distribution and execution of data in a multiprocessor environment
US7159217B2 (en) * 2001-12-20 2007-01-02 Cadence Design Systems, Inc. Mechanism for managing parallel execution of processes in a distributed computing environment
US10255583B2 (en) * 2007-05-01 2019-04-09 Oracle International Corporation Nested hierarchical rollups by level using a normalized table
US20090228543A1 (en) * 2008-03-05 2009-09-10 Collum Dana S Agent representative for the internet

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009041801A2 (en) * 2007-09-27 2009-04-02 Mimos Berhad Trusted node for grid computing

Also Published As

Publication number Publication date
US20110219380A1 (en) 2011-09-08
US8392922B2 (en) 2013-03-05
CN102193822A (zh) 2011-09-21

Similar Documents

Publication Publication Date Title
CN110716748B (zh) 业务处理方法、装置、计算机可读介质及电子设备
US11941381B2 (en) Method for compiling from a high-level scripting language to a blockchain native scripting language
US8843646B2 (en) Multi-desktop interaction using nested remote desktop sessions
KR100328516B1 (ko) 응용프로그램사이에통신프로토콜을설정하기위한시스템및방법
CN102193822B (zh) 用于嵌套任务的结果的编组的方法和系统
CN106453474A (zh) 在不稳定网络环境中的大文件的网络传输
CN101297277A (zh) 静态可验证进程间通信隔离进程
JP5362011B2 (ja) メッセージ処理パイプラインの構成
CN113722755A (zh) 实现隐私保护的数据处理系统、方法、装置和设备
Cheng et al. Development of holonic information coordination systems with failure-recovery considerations
US11347630B1 (en) Method and system for an automated testing framework in design pattern and validating messages
CN114116509A (zh) 程序分析方法、装置、电子设备和存储介质
US20110246967A1 (en) Methods and systems for automation framework extensibility
EP2400390A1 (en) Provision of services and libraries to remote clients
US20100333115A1 (en) System and method for a source-independent server interface accepting origin specific commands
CN103049306B (zh) 基于接口的api上的静态成员和参数化构造函数的模拟
CN109683879B (zh) 前端组件处理方法及装置
CN110417978A (zh) 菜单配置方法、装置、设备及存储介质
CN113760262A (zh) 任务处理方法、装置、计算机系统和计算机可读存储介质
CN117270833B (zh) 服务调用及发布方法、介质和计算机设备
CN115562641B (zh) 数据处理方法、装置、电子设备及计算机可读存储介质
Zhao et al. An agent based wrapper mechanism used in system integration
US8983984B2 (en) Methods and systems for simplifying object mapping for external interfaces
CN116594792A (zh) 一种跨语言sdk系统、方法、设备及可读介质
CN112565421B (zh) 信息传输方法、系统、电子设备及存储介质

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
ASS Succession or assignment of patent right

Owner name: MICROSOFT TECHNOLOGY LICENSING LLC

Free format text: FORMER OWNER: MICROSOFT CORP.

Effective date: 20150727

C41 Transfer of patent application or patent right or utility model
TA01 Transfer of patent application right

Effective date of registration: 20150727

Address after: Washington State

Applicant after: Micro soft technique license Co., Ltd

Address before: Washington State

Applicant before: Microsoft Corp.

C14 Grant of patent or utility model
GR01 Patent grant