我正在使用委托设置一些异步函数调用的C#应用程序。这些调用将受到多次调用的影响,因此我必须使用代理的BeginInvoke
方法的重载,该方法需要userState
参数;例如: -做多个Asyncronous Invocations需要唯一的用户状态?
callerDelegate.BeginInvoke([fn_args...], callback, userState)
在Event-based Asynchronous Pattern Overview page on MSDN,它说,大约userState:
有可能两个重载 异步操作: 单调用和 多次调用。您可以通过 将这两种形式按其方法签名进行区分 方法签名: 多次调用表单具有一个名为userState的额外 参数。这种形式 可以让您的代码 多次调用Method1Async(字符串参数,对象 userState),而无需 等待任何待执行的异步 操作完成。如果在另一个 手上,您尝试在 先前的调用完成之前调用 Method1Async(字符串参数),则 方法会产生一个 InvalidOperationException。
多调用过载的userState参数允许您使用 区分异步 操作。您提供 每次调用Method1Async(字符串 PARAM,对象userState),以及一个独特的价值 (例如,一个GUID或散列码),当完成 每个操作,您 事件处理程序可确定的这 实例操作引发了 完成事件。
我的问题是:没有了userState
已是唯一的?措词可以被解释为使其仅仅是一个建议,或者只是与他们的例子有关。我需要将状态传递给回调函数,我不需要它是唯一的。 (我的应用程序不需要跟踪每个单独的调用实例。)因此,唯一性是一项要求吗? (也许是.NET的异步框架需要它?)
此外,所引用的页面是基于事件的异步操作;这是否适用于我的情况(使用委托的异步调用)?
我已经搜索谷歌和SO几天,还没有找到答案。
在此先感谢
非常感谢! (对这样一个冗长的问题的简洁回应!) – paul 2011-01-07 17:05:22