【发布时间】:2017-08-11 11:22:38
【问题描述】:
我正在引用一个类,它使用回调而不是异步操作来执行各种要求很高的操作。例如:
class CallbackClass : SomeSdkCallbacks
{
public void RequestData()
{
// We call this to request some data.
// After some time, this will trigger OnDataReturned to be called
}
public void OnDataReturned(DataObject data)
{
// This will be called automatically with returned data via SomeSdkCallbacks
}
}
此类结构有很多实例。
我想要做的是围绕这个创建一个包装类,以简化它的使用。我目前的结构是:
class MyWrapperClass
{
CallbackClass CallbackClass;
public MyWrapperClass()
{
this.CallbackClass = new CallbackClass();
}
public DataObject GetData()
{
this.CallbackClass.RequestData();
// Somehow wait until this.CallbackClass.OnDataReturned is called?
// Somehow get the data that would be passed in to this.CallbackClass.OnDataReturned()???
}
}
将“回调”架构封装成单个异步方法的最佳方法是什么?
编辑:为了澄清,理想情况下,我想将其打包成一个方法,该方法可以在单个请求中返回数据。请参阅我的示例中的 MyWrapperClass.GetData() 方法了解我的理想结构。
编辑 2:我知道这种期望的架构是错误的形式。不幸的是,这是我要求的结构。
【问题讨论】:
-
以
On开头的方法(如OnDataReturned)按照惯例是引发事件的方法,而不是处理事件的方法。看来你的架构有点问题。 -
在
public void OnDataReturned(DataObject data)方法中也没有任何内容可以让您以任何方式拦截它。使用您显示的代码不可能完成您的要求。您需要向我们提供minimal reproducible example,以便我们获得有效的解决方案。 -
@Enigmativity 好点,但是该方法正在实现
SomeSdkCallbacks接口,我无法控制它。 -
除非您对某事有一定的控制权,否则这是一个不可能回答的问题。请告诉我们你能控制什么,不能控制什么。请提供minimal reproducible example。
-
@Enigmativity 你显然不明白我的问题。不过不用担心,Filip 理解并回答了它。
标签: c# .net asynchronous callback