【发布时间】:2021-06-17 07:53:23
【问题描述】:
我正在开发一个托管 signalR 集线器的 asp.net (.Net 5) 应用程序,以允许客户使用官方佳能 sdk 与佳能相机进行通信(例如拍照、捕捉视频和实时流媒体)。它在 Windows 上完美运行。但是,在 MacOS 上调用 c++ 库会导致死锁,除非在主线程上调用。我所能找到的只是 mac sdk 不是线程安全的,所以它应该在任何其他线程中使用。
例如,此代码有效:
class Program
{
static void Main(string[] args)
{
SdkWrapper.EdsInitializeSDK();
}
}
static class SdkWrapper
{
[DllImport("EDSDK")]
public static extern int EdsInitializeSDK();
}
但是无论是在另一个线程上运行还是在异步等待上下文中,函数都不会因为死锁而返回。
class Program
{
static async Task Main(string[] args)
{
await Task.Run(SdkWrapper.EdsInitializeSDK);
var thread = new Thread(() => SdkWrapper.EdsInitializeSDK());
thread.Start();
}
}
static class SdkWrapper
{
[DllImport("EDSDK")]
public static extern int EdsInitializeSDK();
}
因此,一种解决方法可能是在主线程中运行所有 sdk 函数调用(可能这是一个坏主意)。有没有办法让它与 asp.net 一起工作?
或者有人知道在 MacOS 上将 canon sdk 与 .net 一起使用的更好方法吗?
【问题讨论】:
标签: c# macos asp.net-core .net-core canon-sdk