我正在尝试编写一个C#包装器,用于调用一个第三方的原生代码库,以便在我们几乎全部使用.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>对象和async/await模式方面更有经验的人寻求帮助。