【发布时间】:2021-06-28 04:02:43
【问题描述】:
在我的项目中,有两个地方使用了类似的代码。我想创建一个模板来避免这种代码重复。 这是第一种情况:
IAsyncOperation<GattCharacteristicsResult> charListResult = service.GetCharacteristicsAsync();
while (charListResult.Status() != AsyncStatus::Completed) {
continue;
}
GattCharacteristicsResult charListR = charListResult.GetResults();
这是第二种情况:
IAsyncOperation<GattDescriptorsResult> discrOper = characteristic.GetDescriptorsAsync();
while (discrOper.Status() != AsyncStatus::Completed) {
continue;
}
GattDescriptorsResult descrR = discrOper.GetResults();
我能做到的最多是:
template<class Operation>
GattCharacteristicsResult getNested1(Operation operation) {
IAsyncOperation<GattCharacteristicsResult> result = operation();
while (result.Status() != AsyncStatus::Completed) {
continue;
}
return result.GetResults();
}
相应地,使用模板:
attCharacteristicsResult charListR = getNested1([&service]() { return service.GetCharacteristicsAsync(); });
但这还不够。我需要摆脱“GattCharacteristicsResult”。有什么想法吗?
【问题讨论】:
-
IAsyncOperation没有Wait函数或类似函数。积极的等待让我很困扰。 -
当然,主动等待并不好。但是主线程不能等待(最后我在尝试 co_await 时出错)。所以,对于那个例子,我就是这样做的。