C# 如何在C语言中围绕第三方IO库编写异步包装器#

C# 如何在C语言中围绕第三方IO库编写异步包装器#,c#,.net,io,async-await,C#,.net,Io,Async Await,我需要使用一个可以访问自己数据库的库。不幸的是,所有方法都是经典的同步方法。我更喜欢使用async方法来卸载IO负载,就像我们已经为SQL Server做的那样 我知道这是一个非常笼统的问题,没有太多具体的信息。有什么办法可以达到这个目的吗?还是说这太糟糕了 示例和/或链接将不胜感激。如果您正在使用的库中有某种形式的异步API,您可以使用它与TaskCompletionSource一起制造asyncAPI。它可以是带有XCompleted事件或任何其他形式的BeginX/EndX,DoX 如果没

我需要使用一个可以访问自己数据库的库。不幸的是,所有方法都是经典的同步方法。我更喜欢使用
async
方法来卸载IO负载,就像我们已经为SQL Server做的那样

我知道这是一个非常笼统的问题,没有太多具体的信息。有什么办法可以达到这个目的吗?还是说这太糟糕了


示例和/或链接将不胜感激。

如果您正在使用的库中有某种形式的异步API,您可以使用它与
TaskCompletionSource
一起制造
async
API。它可以是带有
XCompleted
事件或任何其他形式的
BeginX
/
EndX
DoX


如果没有类似的内容存在,您就不能创建真正的异步重载。您可以使用
任务将这些同步调用卸载到
线程池
线程。运行
,但这只会有助于提高响应速度,而不会在任何方面提高性能。

除非您有权访问源代码,否则您无法将其包装为真正的异步。除非它已经为您公开了一些异步API,否则这将是一个问题。您需要在这个第三方库中使用某种形式的异步调用。像BeginRead()/EndRead()之类的东西。有了这些对,就可以编写一个异步/可等待的包装器。如果它的
BeginX/EndX
,您可以使用
fromsync
工厂方法,而不是
TaskCompletionSource
。请看@ricoster当然。。。这是一个概括
FromAsync
使用与TaskCompletionSource使用的任务API相同的任务API。