问题描述
我有 C# avalonia 应用程序通过开发人员提供的 SDK 使用一些非线程安全的库。更具体地说是Windows Zoom SDK。一些 SDK 功能建立在事件驱动模式之上。调用 SDK 方法后,应用程序必须等待执行结果回调到达。因此使用taskcompletionsource(请参阅下面的代码)在应用程序中应用了基于任务的异步模式。
在应用程序中应用 async/await 模式后,SDK 无法正常工作 (details)。但是,此问题不讨论使用 Zoom SDK。问题是关于异步/等待模式的使用如何可能导致某些非线程安全库(或 SDK)的错误行为?
SDK 封装方法:
public async Task<bool> SdkMethodAAsync(string parameter)
{
try
{
this.sdkService.SdkMethodA(parameter);
this.tcs = new taskcompletionsource<bool>();
return await this.tcs.Task;
}
catch (Exception)
{
return false;
}
return false;
}
SDK 回调处理程序:
public void OnMethodAReturn(MethodAResult ret)
{
// here some property can also be changed
// and which will trigger an event on which SDK calls can be made to
this.tcs.TrySetResult(ret == MethodAResult.METHODA_SUCCESS);
}
高级代码:
public async Task StartAsync(string parameter1,string parameter2)
{
var resultMethodA = await SdkMethodAAsync(parameter1);
var resultMethodB = await SdkMethodBAsync(parameter2);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)