{% if is_async %}
return await Task.Run(() =>
{
{{ receiver_guard }} var rc = NativeMethods.{{ native_method_name }}(
{{ args_block }} out var outPtr,
out var outLen,
out var outCap
);
{% if consumes_receiver %}
handleTransfer.Commit();
{% endif %}
try
{
if (rc != 0)
{
throw {{ exception_name }}.FromLastError("Unknown error");
}
var result = new byte[(int)outLen];
System.Runtime.InteropServices.Marshal.Copy(outPtr, result, 0, (int)outLen);
return result;
}
finally
{
NativeMethods.FreeBytes(outPtr, outLen, outCap);
}
});
{% else %}
{{ receiver_guard }} var rc = NativeMethods.{{ native_method_name }}(
{{ args_block }} out var outPtr,
out var outLen,
out var outCap
);
{% if consumes_receiver %}
handleTransfer.Commit();
{% endif %}
try
{
if (rc != 0)
{
throw {{ exception_name }}.FromLastError("Unknown error");
}
var result = new byte[(int)outLen];
System.Runtime.InteropServices.Marshal.Copy(outPtr, result, 0, (int)outLen);
return result;
}
finally
{
NativeMethods.FreeBytes(outPtr, outLen, outCap);
}
{% endif %}