Gio.Task¶
| Subclasses: | None | 
|---|
Methods¶
| Inherited: | GObject.Object (37), Gio.AsyncResult (4) | 
|---|---|
| Structs: | GObject.ObjectClass (5) | 
| class | is_valid(result, source_object) | 
| class | new(source_object, cancellable, callback, *callback_data) | 
| class | report_error(source_object, callback, callback_data, source_tag, error) | 
| get_cancellable() | |
| get_check_cancellable() | |
| get_completed() | |
| get_context() | |
| get_name() | |
| get_priority() | |
| get_return_on_cancel() | |
| get_source_object() | |
| get_source_tag() | |
| get_task_data() | |
| had_error() | |
| propagate_boolean() | |
| propagate_int() | |
| propagate_pointer() | |
| propagate_value() | |
| return_boolean(result) | |
| return_error(error) | |
| return_error_if_cancelled() | |
| return_int(result) | |
| return_pointer(result, result_destroy) | |
| return_value(result) | |
| run_in_thread(task_func) | |
| run_in_thread_sync(task_func) | |
| set_check_cancellable(check_cancellable) | |
| set_name(name) | |
| set_priority(priority) | |
| set_return_on_cancel(return_on_cancel) | |
| set_source_tag(source_tag) | |
| set_task_data(task_data, task_data_destroy) | 
Virtual Methods¶
| Inherited: | GObject.Object (7), Gio.AsyncResult (3) | 
|---|
Signals¶
| Inherited: | GObject.Object (1) | 
|---|
Fields¶
| Inherited: | GObject.Object (1) | 
|---|
Class Details¶
- 
class Gio.Task(**kwargs)¶
- Bases: - GObject.Object,- Gio.AsyncResult- Abstract: - No - Structure: - Gio.TaskClass- A - Gio.Taskrepresents and manages a cancellable “task”.- Asynchronous operations
 - The most common usage of - Gio.Taskis as a- Gio.AsyncResult, to manage data during an asynchronous operation. You call- Gio.Task.new() in the “start” method, followed by- Gio.Task.set_task_data() and the like if you need to keep some additional data associated with the task, and then pass the task object around through your asynchronous operation. Eventually, you will call a method such as- Gio.Task.return_pointer() or- Gio.Task.return_error(), which will save the value you give it and then invoke the task’s callback function in the- thread-default main contextwhere it was created (waiting until the next iteration of the main loop first, if necessary). The caller will pass the- Gio.Taskback to the operation’s finish function (as a- Gio.AsyncResult), and you can use- Gio.Task.propagate_pointer() or the like to extract the return value.- Here is an example for using - Gio.Taskas a- Gio.AsyncResult:- typedef struct { CakeFrostingType frosting; char *message; } DecorationData; static void decoration_data_free (DecorationData *decoration) { g_free (decoration->message); g_slice_free (DecorationData, decoration); } static void baked_cb (Cake *cake, gpointer user_data) { GTask *task = user_data; DecorationData *decoration = g_task_get_task_data (task); GError *error = NULL; if (cake == NULL) { g_task_return_new_error (task, BAKER_ERROR, BAKER_ERROR_NO_FLOUR, "Go to the supermarket"); g_object_unref (task); return; } if (!cake_decorate (cake, decoration->frosting, decoration->message, &error)) { g_object_unref (cake); // g_task_return_error() takes ownership of error g_task_return_error (task, error); g_object_unref (task); return; } g_task_return_pointer (task, cake, g_object_unref); g_object_unref (task); } void baker_bake_cake_async (Baker *self, guint radius, CakeFlavor flavor, CakeFrostingType frosting, const char *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTask *task; DecorationData *decoration; Cake *cake; task = g_task_new (self, cancellable, callback, user_data); if (radius < 3) { g_task_return_new_error (task, BAKER_ERROR, BAKER_ERROR_TOO_SMALL, "%ucm radius cakes are silly", radius); g_object_unref (task); return; } cake = _baker_get_cached_cake (self, radius, flavor, frosting, message); if (cake != NULL) { // _baker_get_cached_cake() returns a reffed cake g_task_return_pointer (task, cake, g_object_unref); g_object_unref (task); return; } decoration = g_slice_new (DecorationData); decoration->frosting = frosting; decoration->message = g_strdup (message); g_task_set_task_data (task, decoration, (GDestroyNotify) decoration_data_free); _baker_begin_cake (self, radius, flavor, cancellable, baked_cb, task); } Cake * baker_bake_cake_finish (Baker *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (g_task_is_valid (result, self), NULL); return g_task_propagate_pointer (G_TASK (result), error); } - Chained asynchronous operations
 - Gio.Taskalso tries to simplify asynchronous operations that internally chain together several smaller asynchronous operations.- Gio.Task.get_cancellable(),- Gio.Task.get_context(), and- Gio.Task.get_priority() allow you to get back the task’s- Gio.Cancellable,- GLib.MainContext, and I/O priority when starting a new subtask, so you don’t have to keep track of them yourself. g_task_attach_source() simplifies the case of waiting for a source to fire (automatically using the correct- GLib.MainContextand priority).- Here is an example for chained asynchronous operations: - typedef struct { Cake *cake; CakeFrostingType frosting; char *message; } BakingData; static void decoration_data_free (BakingData *bd) { if (bd->cake) g_object_unref (bd->cake); g_free (bd->message); g_slice_free (BakingData, bd); } static void decorated_cb (Cake *cake, GAsyncResult *result, gpointer user_data) { GTask *task = user_data; GError *error = NULL; if (!cake_decorate_finish (cake, result, &error)) { g_object_unref (cake); g_task_return_error (task, error); g_object_unref (task); return; } // baking_data_free() will drop its ref on the cake, so we have to // take another here to give to the caller. g_task_return_pointer (task, g_object_ref (cake), g_object_unref); g_object_unref (task); } static gboolean decorator_ready (gpointer user_data) { GTask *task = user_data; BakingData *bd = g_task_get_task_data (task); cake_decorate_async (bd->cake, bd->frosting, bd->message, g_task_get_cancellable (task), decorated_cb, task); return G_SOURCE_REMOVE; } static void baked_cb (Cake *cake, gpointer user_data) { GTask *task = user_data; BakingData *bd = g_task_get_task_data (task); GError *error = NULL; if (cake == NULL) { g_task_return_new_error (task, BAKER_ERROR, BAKER_ERROR_NO_FLOUR, "Go to the supermarket"); g_object_unref (task); return; } bd->cake = cake; // Bail out now if the user has already cancelled if (g_task_return_error_if_cancelled (task)) { g_object_unref (task); return; } if (cake_decorator_available (cake)) decorator_ready (task); else { GSource *source; source = cake_decorator_wait_source_new (cake); // Attach @source to @task's GMainContext and have it call // decorator_ready() when it is ready. g_task_attach_source (task, source, decorator_ready); g_source_unref (source); } } void baker_bake_cake_async (Baker *self, guint radius, CakeFlavor flavor, CakeFrostingType frosting, const char *message, gint priority, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { GTask *task; BakingData *bd; task = g_task_new (self, cancellable, callback, user_data); g_task_set_priority (task, priority); bd = g_slice_new0 (BakingData); bd->frosting = frosting; bd->message = g_strdup (message); g_task_set_task_data (task, bd, (GDestroyNotify) baking_data_free); _baker_begin_cake (self, radius, flavor, cancellable, baked_cb, task); } Cake * baker_bake_cake_finish (Baker *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (g_task_is_valid (result, self), NULL); return g_task_propagate_pointer (G_TASK (result), error); } - Asynchronous operations from synchronous ones
 - You can use - Gio.Task.run_in_thread() to turn a synchronous operation into an asynchronous one, by running it in a thread. When it completes, the result will be dispatched to the- thread-default main contextwhere the- Gio.Taskwas created.- Running a task in a thread: - typedef struct { guint radius; CakeFlavor flavor; CakeFrostingType frosting; char *message; } CakeData; static void cake_data_free (CakeData *cake_data) { g_free (cake_data->message); g_slice_free (CakeData, cake_data); } static void bake_cake_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { Baker *self = source_object; CakeData *cake_data = task_data; Cake *cake; GError *error = NULL; cake = bake_cake (baker, cake_data->radius, cake_data->flavor, cake_data->frosting, cake_data->message, cancellable, &error); if (cake) g_task_return_pointer (task, cake, g_object_unref); else g_task_return_error (task, error); } void baker_bake_cake_async (Baker *self, guint radius, CakeFlavor flavor, CakeFrostingType frosting, const char *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { CakeData *cake_data; GTask *task; cake_data = g_slice_new (CakeData); cake_data->radius = radius; cake_data->flavor = flavor; cake_data->frosting = frosting; cake_data->message = g_strdup (message); task = g_task_new (self, cancellable, callback, user_data); g_task_set_task_data (task, cake_data, (GDestroyNotify) cake_data_free); g_task_run_in_thread (task, bake_cake_thread); g_object_unref (task); } Cake * baker_bake_cake_finish (Baker *self, GAsyncResult *result, GError **error) { g_return_val_if_fail (g_task_is_valid (result, self), NULL); return g_task_propagate_pointer (G_TASK (result), error); } - Adding cancellability to uncancellable tasks
 - Finally, - Gio.Task.run_in_thread() and- Gio.Task.run_in_thread_sync() can be used to turn an uncancellable operation into a cancellable one. If you call- Gio.Task.set_return_on_cancel(), passing- True, then if the task’s- Gio.Cancellableis cancelled, it will return control back to the caller immediately, while allowing the task thread to continue running in the background (and simply discarding its result when it finally does finish). Provided that the task thread is careful about how it uses locks and other externally-visible resources, this allows you to make “GLib-friendly” asynchronous and cancellable synchronous variants of blocking APIs.- Cancelling a task: - static void bake_cake_thread (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable) { Baker *self = source_object; CakeData *cake_data = task_data; Cake *cake; GError *error = NULL; cake = bake_cake (baker, cake_data->radius, cake_data->flavor, cake_data->frosting, cake_data->message, &error); if (error) { g_task_return_error (task, error); return; } // If the task has already been cancelled, then we don't want to add // the cake to the cake cache. Likewise, we don't want to have the // task get cancelled in the middle of updating the cache. // g_task_set_return_on_cancel() will return %TRUE here if it managed // to disable return-on-cancel, or %FALSE if the task was cancelled // before it could. if (g_task_set_return_on_cancel (task, FALSE)) { // If the caller cancels at this point, their // GAsyncReadyCallback won't be invoked until we return, // so we don't have to worry that this code will run at // the same time as that code does. But if there were // other functions that might look at the cake cache, // then we'd probably need a GMutex here as well. baker_add_cake_to_cache (baker, cake); g_task_return_pointer (task, cake, g_object_unref); } } void baker_bake_cake_async (Baker *self, guint radius, CakeFlavor flavor, CakeFrostingType frosting, const char *message, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data) { CakeData *cake_data; GTask *task; cake_data = g_slice_new (CakeData); ... task = g_task_new (self, cancellable, callback, user_data); g_task_set_task_data (task, cake_data, (GDestroyNotify) cake_data_free); g_task_set_return_on_cancel (task, TRUE); g_task_run_in_thread (task, bake_cake_thread); } Cake * baker_bake_cake_sync (Baker *self, guint radius, CakeFlavor flavor, CakeFrostingType frosting, const char *message, GCancellable *cancellable, GError **error) { CakeData *cake_data; GTask *task; Cake *cake; cake_data = g_slice_new (CakeData); ... task = g_task_new (self, cancellable, NULL, NULL); g_task_set_task_data (task, cake_data, (GDestroyNotify) cake_data_free); g_task_set_return_on_cancel (task, TRUE); g_task_run_in_thread_sync (task, bake_cake_thread); cake = g_task_propagate_pointer (task, error); g_object_unref (task); return cake; } - Porting from Gio.SimpleAsyncResult
 - Gio.Task’s API attempts to be simpler than- Gio.SimpleAsyncResult’s in several ways:- You can save task-specific data with Gio.Task.set_task_data(), and retrieve it later withGio.Task.get_task_data(). This replaces the abuse of g_simple_async_result_set_op_res_gpointer() for the same purpose withGio.SimpleAsyncResult.
- In addition to the task data, Gio.Taskalso keeps track of the priority,Gio.Cancellable, andGLib.MainContextassociated with the task, so tasks that consist of a chain of simpler asynchronous operations will have easy access to those values when starting each sub-task.
- Gio.Task.return_error_if_cancelled() provides simplified handling for cancellation. In addition, cancellation overrides any other- Gio.Taskreturn value by default, like- Gio.SimpleAsyncResultdoes when- Gio.SimpleAsyncResult.set_check_cancellable() is called. (You can use- Gio.Task.set_check_cancellable() to turn off that behavior.) On the other hand,- Gio.Task.run_in_thread() guarantees that it will always run your- task_func, even if the task’s- Gio.Cancellableis already cancelled before the task gets a chance to run; you can start your- task_funcwith a- Gio.Task.return_error_if_cancelled() check if you need the old behavior.
- The “return” methods (eg, Gio.Task.return_pointer()) automatically cause the task to be “completed” as well, and there is no need to worry about the “complete” vs “complete in idle” distinction. (Gio.Taskautomatically figures out whether the task’s callback can be invoked directly, or if it needs to be sent to anotherGLib.MainContext, or delayed until the next iteration of the currentGLib.MainContext.)
- The “finish” functions for Gio.Taskbased operations are generally much simpler thanGio.SimpleAsyncResultones, normally consisting of only a single call toGio.Task.propagate_pointer() or the like. “steals” the return value from theGio.Task, it is not necessary to juggle pointers around to prevent it from being freed twice.
- With Gio.SimpleAsyncResult, it was common to callGio.SimpleAsyncResult.propagate_error() from the_finish()wrapper function, and have virtual method implementations only deal with successful returns. This behavior is deprecated, because it makes it difficult for a subclass to chain to a parent class’s async methods. Instead, the wrapper function should just be a simple wrapper, and the virtual method should call an appropriateg_task_propagate_function. Note that wrapper methods can now useGio.AsyncResult.legacy_propagate_error() to do old-styleGio.SimpleAsyncResulterror-returning behavior, andGio.AsyncResult.is_tagged() to check if a result is tagged as having come from the_async()wrapper function (for “short-circuit” results, such as when passing 0 toGio.InputStream.read_async()).
 - New in version g_task_propagate_pointer(. - 
classmethod is_valid(result, source_object)[source]¶
- Parameters: - result (Gio.AsyncResult) – AGio.AsyncResult
- source_object (GObject.ObjectorNone) – the source object expected to be associated with the task
 - Returns: - Return type: - Checks that result is a - Gio.Task, and that source_object is its source object (or that source_object is- Noneand result has no source object). This can be used in g_return_if_fail() checks.- New in version 2.36. 
- result (
 - 
classmethod new(source_object, cancellable, callback, *callback_data)[source]¶
- Parameters: - source_object (GObject.ObjectorNone) – theGObject.Objectthat owns this task, orNone.
- cancellable (Gio.CancellableorNone) – optionalGio.Cancellableobject,Noneto ignore.
- callback (Gio.AsyncReadyCallbackorNone) – aGio.AsyncReadyCallback.
- callback_data (objectorNone) – user data passed to callback.
 - Returns: - a - Gio.Task.- Return type: - Creates a - Gio.Taskacting on source_object, which will eventually be used to invoke callback in the current- thread-default main context.- Call this in the “start” method of your asynchronous method, and pass the - Gio.Taskaround throughout the asynchronous operation. You can use- Gio.Task.set_task_data() to attach task-specific data to the object, which you can retrieve later via- Gio.Task.get_task_data().- By default, if cancellable is cancelled, then the return value of the task will always be - Gio.IOErrorEnum.CANCELLED, even if the task had already completed before the cancellation. This allows for simplified handling in cases where cancellation may imply that other objects that the task depends on have been destroyed. If you do not want this behavior, you can use- Gio.Task.set_check_cancellable() to change it.- New in version 2.36. 
- source_object (
 - 
classmethod report_error(source_object, callback, callback_data, source_tag, error)[source]¶
- Parameters: - source_object (GObject.ObjectorNone) – theGObject.Objectthat owns this task, orNone.
- callback (Gio.AsyncReadyCallbackorNone) – aGio.AsyncReadyCallback.
- callback_data (objectorNone) – user data passed to callback.
- source_tag (objectorNone) – an opaque pointer indicating the source of this task
- error (GLib.Error) – error to report
 - Creates a - Gio.Taskand then immediately calls- Gio.Task.return_error() on it. Use this in the wrapper function of an asynchronous method when you want to avoid even calling the virtual method. You can then use- Gio.AsyncResult.is_tagged() in the finish method wrapper to check if the result there is tagged as having been created by the wrapper method, and deal with it appropriately if so.- See also g_task_report_new_error(). - New in version 2.36. 
- source_object (
 - 
get_cancellable()[source]¶
- Returns: - self’s - Gio.Cancellable- Return type: - Gio.Cancellable- Gets self’s - Gio.Cancellable- New in version 2.36. 
 - 
get_check_cancellable()[source]¶
- Return type: - bool- Gets self’s check-cancellable flag. See - Gio.Task.set_check_cancellable() for more details.- New in version 2.36. 
 - 
get_completed()[source]¶
- Returns: - Trueif the task has completed,- Falseotherwise.- Return type: - bool- Gets the value of - Gio.Task- :completed. This changes from- Falseto- Trueafter the task’s callback is invoked, and will return- Falseif called from inside the callback.- New in version 2.44. 
 - 
get_context()[source]¶
- Returns: - self’s - GLib.MainContext- Return type: - GLib.MainContext- Gets the - GLib.MainContextthat self will return its result in (that is, the context that was the- thread-default main contextat the point when self was created).- This will always return a non- - Nonevalue, even if the task’s context is the default- GLib.MainContext.- New in version 2.36. 
 - 
get_name()[source]¶
- Returns: - self’s name, or - None- Return type: - stror- None- Gets self’s name. See - Gio.Task.set_name().- New in version 2.60. 
 - 
get_priority()[source]¶
- Returns: - self’s priority - Return type: - int- Gets self’s priority - New in version 2.36. 
 - 
get_return_on_cancel()[source]¶
- Return type: - bool- Gets self’s return-on-cancel flag. See - Gio.Task.set_return_on_cancel() for more details.- New in version 2.36. 
 - 
get_source_object()[source]¶
- Returns: - self’s source object, or - None- Return type: - GObject.Objector- None- Gets the source object from self. Like - Gio.AsyncResult.get_source_object(), but does not ref the object.- New in version 2.36. 
 - 
get_source_tag()[source]¶
- Returns: - self’s source tag - Return type: - objector- None- Gets self’s source tag. See - Gio.Task.set_source_tag().- New in version 2.36. 
 - 
get_task_data()[source]¶
- Returns: - self’s - task_data.- Return type: - objector- None- Gets self’s - task_data.- New in version 2.36. 
 - 
had_error()[source]¶
- Returns: - Trueif the task resulted in an error,- Falseotherwise.- Return type: - bool- Tests if self resulted in an error. - New in version 2.36. 
 - 
propagate_boolean()[source]¶
- Raises: - GLib.Error- Returns: - the task result, or - Falseon error- Return type: - bool- Gets the result of self as a - bool.- If the task resulted in an error, or was cancelled, then this will instead return - Falseand set error.- Since this method transfers ownership of the return value (or error) to the caller, you may only call it once. - New in version 2.36. 
 - 
propagate_int()[source]¶
- Raises: - GLib.Error- Returns: - the task result, or -1 on error - Return type: - int- Gets the result of self as an integer (#gssize). - If the task resulted in an error, or was cancelled, then this will instead return -1 and set error. - Since this method transfers ownership of the return value (or error) to the caller, you may only call it once. - New in version 2.36. 
 - 
propagate_pointer()[source]¶
- Raises: - GLib.Error- Returns: - the task result, or - Noneon error- Return type: - objector- None- Gets the result of self as a pointer, and transfers ownership of that value to the caller. - If the task resulted in an error, or was cancelled, then this will instead return - Noneand set error.- Since this method transfers ownership of the return value (or error) to the caller, you may only call it once. - New in version 2.36. 
 - 
propagate_value()[source]¶
- Raises: - GLib.Error- Returns: - Trueif self succeeded,- Falseon error.- value: - return location for the - GObject.Value- Return type: - ( - bool, value:- GObject.Value)- Gets the result of self as a - GObject.Value, and transfers ownership of that value to the caller. As with- Gio.Task.return_value(), this is a generic low-level method;- Gio.Task.propagate_pointer() and the like will usually be more useful for C code.- If the task resulted in an error, or was cancelled, then this will instead set error and return - False.- Since this method transfers ownership of the return value (or error) to the caller, you may only call it once. - New in version 2.64. 
 - 
return_boolean(result)[source]¶
- Parameters: - result ( - bool) – the- boolresult of a task function.- Sets self’s result to result and completes the task (see - Gio.Task.return_pointer() for more discussion of exactly what this means).- New in version 2.36. 
 - 
return_error(error)[source]¶
- Parameters: - error ( - GLib.Error) – the- GLib.Errorresult of a task function.- Sets self’s result to error (which self assumes ownership of) and completes the task (see - Gio.Task.return_pointer() for more discussion of exactly what this means).- Note that since the task takes ownership of error, and since the task may be completed before returning from - Gio.Task.return_error(), you cannot assume that error is still valid after calling this. Call- GLib.Error.copy() on the error if you need to keep a local copy as well.- See also g_task_return_new_error(). - New in version 2.36. 
 - 
return_error_if_cancelled()[source]¶
- Returns: - Trueif self has been cancelled,- Falseif not- Return type: - bool- Checks if self’s - Gio.Cancellablehas been cancelled, and if so, sets self’s error accordingly and completes the task (see- Gio.Task.return_pointer() for more discussion of exactly what this means).- New in version 2.36. 
 - 
return_int(result)[source]¶
- Parameters: - result ( - int) – the integer (#gssize) result of a task function.- Sets self’s result to result and completes the task (see - Gio.Task.return_pointer() for more discussion of exactly what this means).- New in version 2.36. 
 - 
return_pointer(result, result_destroy)[source]¶
- Parameters: - result (objectorNone) – the pointer result of a task function
- result_destroy (GLib.DestroyNotifyorNone) – aGLib.DestroyNotifyfunction.
 - Sets self’s result to result and completes the task. If result is not - None, then result_destroy will be used to free result if the caller does not take ownership of it with- Gio.Task.propagate_pointer().- “Completes the task” means that for an ordinary asynchronous task it will either invoke the task’s callback, or else queue that callback to be invoked in the proper - GLib.MainContext, or in the next iteration of the current- GLib.MainContext. For a task run via- Gio.Task.run_in_thread() or- Gio.Task.run_in_thread_sync(), calling this method will save result to be returned to the caller later, but the task will not actually be completed until the- Gio.TaskThreadFuncexits.- Note that since the task may be completed before returning from - Gio.Task.return_pointer(), you cannot assume that result is still valid after calling this, unless you are still holding another reference on it.- New in version 2.36. 
- result (
 - 
return_value(result)[source]¶
- Parameters: - result ( - GObject.Valueor- None) – the- GObject.Valueresult of a task function- Sets self’s result to result (by copying it) and completes the task. - If result is - Nonethen a- GObject.Valueof type- GObject.TYPE_POINTERwith a value of- Nonewill be used for the result.- This is a very generic low-level method intended primarily for use by language bindings; for C code, - Gio.Task.return_pointer() and the like will normally be much easier to use.- New in version 2.64. 
 - 
run_in_thread(task_func)[source]¶
- Parameters: - task_func ( - Gio.TaskThreadFunc) – a- Gio.TaskThreadFunc- Runs task_func in another thread. When task_func returns, self’s - Gio.AsyncReadyCallbackwill be invoked in self’s- GLib.MainContext.- This takes a ref on self until the task completes. - See - Gio.TaskThreadFuncfor more details about how task_func is handled.- Although GLib currently rate-limits the tasks queued via - Gio.Task.run_in_thread(), you should not assume that it will always do this. If you have a very large number of tasks to run, but don’t want them to all run at once, you should only queue a limited number of them at a time.- New in version 2.36. 
 - 
run_in_thread_sync(task_func)[source]¶
- Parameters: - task_func ( - Gio.TaskThreadFunc) – a- Gio.TaskThreadFunc- Runs task_func in another thread, and waits for it to return or be cancelled. You can use - Gio.Task.propagate_pointer(), etc, afterward to get the result of task_func.- See - Gio.TaskThreadFuncfor more details about how task_func is handled.- Normally this is used with tasks created with a - None- callback, but note that even if the task does have a callback, it will not be invoked when task_func returns.- Gio.Task- :completedwill be set to- Truejust before this function returns.- Although GLib currently rate-limits the tasks queued via - Gio.Task.run_in_thread_sync(), you should not assume that it will always do this. If you have a very large number of tasks to run, but don’t want them to all run at once, you should only queue a limited number of them at a time.- New in version 2.36. 
 - 
set_check_cancellable(check_cancellable)[source]¶
- Parameters: - check_cancellable ( - bool) – whether- Gio.Taskwill check the state of its- Gio.Cancellablefor you.- Sets or clears self’s check-cancellable flag. If this is - True(the default), then- Gio.Task.propagate_pointer(), etc, and- Gio.Task.had_error() will check the task’s- Gio.Cancellablefirst, and if it has been cancelled, then they will consider the task to have returned an “Operation was cancelled” error (- Gio.IOErrorEnum.CANCELLED), regardless of any other error or return value the task may have had.- If check_cancellable is - False, then the- Gio.Taskwill not check the cancellable itself, and it is up to self’s owner to do this (eg, via- Gio.Task.return_error_if_cancelled()).- If you are using - Gio.Task.set_return_on_cancel() as well, then you must leave check-cancellable set- True.- New in version 2.36. 
 - 
set_name(name)[source]¶
- Parameters: - name ( - stror- None) – a human readable name for the task, or- Noneto unset it- Sets self’s name, used in debugging and profiling. The name defaults to - None.- The task name should describe in a human readable way what the task does. For example, ‘Open file’ or ‘Connect to network host’. It is used to set the name of the - GLib.Sourceused for idle completion of the task.- This function may only be called before the self is first used in a thread other than the one it was constructed in. - New in version 2.60. 
 - 
set_priority(priority)[source]¶
- Parameters: - priority ( - int) – the priority of the request- Sets self’s priority. If you do not call this, it will default to - GLib.PRIORITY_DEFAULT.- This will affect the priority of - GLib.Sourcescreated with g_task_attach_source() and the scheduling of tasks run in threads, and can also be explicitly retrieved later via- Gio.Task.get_priority().- New in version 2.36. 
 - 
set_return_on_cancel(return_on_cancel)[source]¶
- Parameters: - return_on_cancel ( - bool) – whether the task returns automatically when it is cancelled.- Returns: - Trueif self’s return-on-cancel flag was changed to match return_on_cancel.- Falseif self has already been cancelled.- Return type: - bool- Sets or clears self’s return-on-cancel flag. This is only meaningful for tasks run via - Gio.Task.run_in_thread() or- Gio.Task.run_in_thread_sync().- If return_on_cancel is - True, then cancelling self’s- Gio.Cancellablewill immediately cause it to return, as though the task’s- Gio.TaskThreadFunchad called- Gio.Task.return_error_if_cancelled() and then returned.- This allows you to create a cancellable wrapper around an uninterruptible function. The - Gio.TaskThreadFuncjust needs to be careful that it does not modify any externally-visible state after it has been cancelled. To do that, the thread should call- Gio.Task.set_return_on_cancel() again to (atomically) set return-on-cancel- Falsebefore making externally-visible changes; if the task gets cancelled before the return-on-cancel flag could be changed,- Gio.Task.set_return_on_cancel() will indicate this by returning- False.- You can disable and re-enable this flag multiple times if you wish. If the task’s - Gio.Cancellableis cancelled while return-on-cancel is- False, then calling- Gio.Task.set_return_on_cancel() to set it- Trueagain will cause the task to be cancelled at that point.- If the task’s - Gio.Cancellableis already cancelled before you call- Gio.Task.run_in_thread()/- Gio.Task.run_in_thread_sync(), then the- Gio.TaskThreadFuncwill still be run (for consistency), but the task will also be completed right away.- New in version 2.36. 
 - 
set_source_tag(source_tag)[source]¶
- Parameters: - source_tag ( - objector- None) – an opaque pointer indicating the source of this task- Sets self’s source tag. You can use this to tag a task return value with a particular pointer (usually a pointer to the function doing the tagging) and then later check it using - Gio.Task.get_source_tag() (or- Gio.AsyncResult.is_tagged()) in the task’s “finish” function, to figure out if the response came from a particular place.- New in version 2.36. 
 - 
set_task_data(task_data, task_data_destroy)[source]¶
- Parameters: - task_data (objectorNone) – task-specific data
- task_data_destroy (GLib.DestroyNotifyorNone) –GLib.DestroyNotifyfor task_data
 - Sets self’s task data (freeing the existing task data, if any). - New in version 2.36. 
- task_data (
 
Property Details¶
- 
Gio.Task.props.completed¶
- Name: - completed- Type: - bool- Default Value: - False- Flags: - READABLE- Whether the task has completed, meaning its callback (if set) has been invoked. This can only happen after - Gio.Task.return_pointer(),- Gio.Task.return_error() or one of the other return functions have been called on the task.- This property is guaranteed to change from - Falseto- Trueexactly once.- The - GObject.Object- ::notifysignal for this change is emitted in the same main context as the task’s callback, immediately after that callback is invoked.- New in version 2.44.