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