我正在尝试围绕用本机代码编写的第三方库编写 ac# 包装器,以便在我们的应用程序中使用,这些库几乎完全用 .NET 编写,并且我正在努力忠实于 C# 模式。这个库中几乎所有的调用本质上都是异步的,将我所有的异步调用包装到 Task<T> 对象中似乎是合适的。下面是一个过于简化的原生库结构示例:
delegate void MyCallback(string outputData);
class MyNativeLibrary
{
public int RegisterCallback(MyCallback callback); // returns -1 on error
public int RequestData(string inputData); // returns -1 on error
}
现在,我已经通过事件订阅提供了我的返回值,但是我相信这将是一种更好的方式来返回我的数据:
class WrapperAroundNativeCode
{
public async Task<string> RequestData(string inputData);
}
到目前为止,我还没有找到合适的方法来实现这一点,我正在联系那些在使用 Task<T> 对象和异步/等待模式方面比我更有经验的人。