我有 C# avalonia应用程序通过开发人员提供的 SDK 使用了一些非线程安全的库。更具体地说是Windows Zoom SDK。一些 SDK 功能是基于事件驱动模式构建的。调用 SDK 方法后,应用程序必须等待执行结果回调到达。因此,使用 TaskCompletionSource 在应用程序中应用了基于任务的异步模式(请参见下面的代码)。
在应用程序中应用 async/await 模式后,SDK 无法正常工作(详情)。但是,这个问题没有讨论使用 Zoom SDK。问题是关于 async/await 模式的使用如何可能导致某些非线程安全库(或 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);
}