我正在用 C# 编写一个客户端,它与使用 boost asio 异步调用的 Windows C++ DLL 进行通信。我之前读过,ASIO 在托管环境中不能很好地工作。VC++ DLL 是一个非托管项目,它为 I/O 处理程序创建一个非托管线程。C# 代码创建一个后台线程来处理通过 pinvoke 向 C++ DLL 发送消息。我的问题是-对 boost::asio::async_write 方法的调用可以在托管线程上吗?或者,它必须在非托管线程上吗?
如果我可以在托管线程上调用 async_write,这将有助于简化逻辑和处理。但是,我担心当 .NET 垃圾收集器运行并停止线程时会发生什么。我不知道 ASIO 是否能够处理这个问题。我没有传递任何指向 C# 代码中定义的数据的指针,所以这应该不是问题。