cvRunAsync1<T> function
Implementation
Future<T> cvRunAsync1<T>(
ffi.Pointer<cvg.CvStatus> Function(cvg.CvCallback_1 callback) func,
void Function(Completer<T> completer, VoidPtr p) onComplete,
) {
final completer = Completer<T>();
late final ffi.NativeCallable<cvg.CvCallback_1Function> ccallback;
var closed = false;
void close() {
if (!closed) {
closed = true;
ccallback.close();
}
}
void onResponse(VoidPtr p) {
onComplete(completer, p);
close();
}
ccallback = ffi.NativeCallable.listener(onResponse);
try {
throwIfFailed(func(ccallback.nativeFunction));
} catch (_) {
close();
rethrow;
}
return completer.future;
}