gio.simple_async_result.SimpleAsyncResult handles gio.types.AsyncReadyCallbacks, error
reporting, operation cancellation and the final state of an operation,
completely transparent to the application. Results can be returned
as a pointer e.g. for functions that return data that is collected
asynchronously, a boolean value for checking the success or failure
of an operation, or a gssize for operations which return the number
of bytes modified by the operation; all of the simple return cases
are covered.
Most of the time, an application will not need to know of the details
of this API; it is handled transparently, and any necessary operations
are handled by gio.async_result.AsyncResult’s interface. However, if implementing
a new GIO module, for writing language bindings, or for complex
applications that need better control of how asynchronous operations
are completed, it is important to understand this functionality.
gio.simple_async_result.SimpleAsyncResults are tagged with the calling function to ensure
that asynchronous functions and their finishing functions are used
together correctly.
As of GLib 2.46, gio.simple_async_result.SimpleAsyncResult is deprecated in favor of gio.task.Task, which provides a simpler API.
gio.simple_async_result.SimpleAsyncResult implements gio.async_result.AsyncResult.
gio.simple_async_result.SimpleAsyncResult handles gio.types.AsyncReadyCallbacks, error reporting, operation cancellation and the final state of an operation, completely transparent to the application. Results can be returned as a pointer e.g. for functions that return data that is collected asynchronously, a boolean value for checking the success or failure of an operation, or a gssize for operations which return the number of bytes modified by the operation; all of the simple return cases are covered.
Most of the time, an application will not need to know of the details of this API; it is handled transparently, and any necessary operations are handled by gio.async_result.AsyncResult’s interface. However, if implementing a new GIO module, for writing language bindings, or for complex applications that need better control of how asynchronous operations are completed, it is important to understand this functionality.
gio.simple_async_result.SimpleAsyncResults are tagged with the calling function to ensure that asynchronous functions and their finishing functions are used together correctly.
To create a new gio.simple_async_result.SimpleAsyncResult, call gio.simple_async_result.SimpleAsyncResult.new_. If the result needs to be created for a glib.error.ErrorG, use gio.simple_async_result.SimpleAsyncResult.newFromError or gio.simple_async_result.SimpleAsyncResult.newTakeError. If a glib.error.ErrorG is not available (e.g. the asynchronous operation doesn’t take a glib.error.ErrorG argument), but the result still needs to be created for an error condition, use gio.simple_async_result.SimpleAsyncResult.newError (or gio.simple_async_result.SimpleAsyncResult.setErrorVa if your application or binding requires passing a variable argument list directly), and the error can then be propagated through the use of gio.simple_async_result.SimpleAsyncResult.propagateError.
An asynchronous operation can be made to ignore a cancellation event by calling gio.simple_async_result.SimpleAsyncResult.setHandleCancellation with a gio.simple_async_result.SimpleAsyncResult for the operation and FALSE. This is useful for operations that are dangerous to cancel, such as close (which would cause a leak if cancelled before being run).
gio.simple_async_result.SimpleAsyncResult can integrate into GLib’s event loop, glib.main_loop.MainLoop, or it can use glib.thread.Threads. gio.simple_async_result.SimpleAsyncResult.complete will finish an I/O task directly from the point where it is called. gio.simple_async_result.SimpleAsyncResult.completeInIdle will finish it from an idle handler in the thread-default main context (see glib.main_context.MainContext.pushThreadDefault) where the gio.simple_async_result.SimpleAsyncResult was created. gio.simple_async_result.SimpleAsyncResult.runInThread will run the job in a separate thread and then use gio.simple_async_result.SimpleAsyncResult.completeInIdle to deliver the result.
To set the results of an asynchronous function, gio.simple_async_result.SimpleAsyncResult.setOpResGpointer, gio.simple_async_result.SimpleAsyncResult.setOpResGboolean, and gio.simple_async_result.SimpleAsyncResult.setOpResGssize
are provided, setting the operation's result to a [xlib.types.void*], glib.types.SOURCE_REMOVE, or gssize, respectively.
Likewise, to get the result of an asynchronous function, gio.simple_async_result.SimpleAsyncResult.getOpResGpointer, gio.simple_async_result.SimpleAsyncResult.getOpResGboolean, and gio.simple_async_result.SimpleAsyncResult.getOpResGssize are provided, getting the operation’s result as a [xlib.types.void*], glib.types.SOURCE_REMOVE, and gssize, respectively.
For the details of the requirements implementations must respect, see gio.async_result.AsyncResult. A typical implementation of an asynchronous operation using gio.simple_async_result.SimpleAsyncResult looks something like this: