Skip to main content

Function

A Function represents a callable piece of code. This may be a WASM function that can be called by C# code, or a C# function which can be called by WASM code. The Function class is a wrapper around the wasmtime::Func struct.

tip

In many cases you will not need to directly use this type. The autogenerated wrapper code already handles calling functions in the most efficient way possible.

Properties​

IReadOnlyList<ValueKind> Parameters​

Get the types of the parameters that this function is called with.

IReadOnlyList<ValueKind> Results​

Get the types of the values that this function returns.

bool IsNull​

Get a value indicating if this Function represents the "null" function.

Function Null​

Get a "null" function reference.

Methods​

bool CheckTypeSignature(Type? returnType = null, params Type[] parameters)​

Check if the given match the Results/Parameters of this Function. This can be used as a type check before calling Invoke.

// func.Results == [ ValueKind.Float32 ]
// func.Parameters == [ ValueKind.Int32, ValueKind.Int64 ]

// True
func.CheckTypeSignature(typeof(float), typeof(int), typeof(long));

// False
func.CheckTypeSignature(null, typeof(long), typeof(double));

Invoke​

There are a thee Invoke functions which call this function and return a result.

  • object? Invoke()
  • object? Invoke(params ValueBox[] arguments)
  • object? Invoke(ReadOnlySpan<ValueBox> arguments)
caution

Using these methods always allocates, prefer using WrapAction/WrapFunc.

WrapAction/WrapFunc​

Attempt to "Wrap" a Function as a standard C# Action or Func. Using a wrapper is less error prone (type safe), faster to execute and does not allocate on every call.

An Action<T> represents a function which accepts a value (type T) and returns nothing. A Func<T> represents a function which accepts nothing and return a value (type T).

tip

A wrapper cannot be created if the types do not match the signature of the Function. In this case Wrap will return null.

Function func = some_func;

// Try to wrap the function as an "Action" which accepts an int.
Action<int> action = func.WrapAction<int>();

// Invoke it like a normal C# method call.
action(10);

FromCallback​

Convert a standard C# Action or Func into a Function. This can be used to allow WASM code to call back into C# code.