Skip to main content
Version: 14.x (API 14) [Current]

Class TaskExtensions

Extension methods to make working with System.Threading.Tasks.Task easier.

Assembly: Dalamud.dll
Declaration
public static class TaskExtensions

Methods

WaitSafely(Task)

Safe alternative to Task.Wait which ensures the calling thread is not a thread pool thread.

Declaration
public static void WaitSafely(this Task task)
Parameters
TypeNameDescription
System.Threading.Tasks.TasktaskThe task to be awaited.

GetResultSafely<T>(Task<T>)

Safe alternative to Task.Result which ensures the calling thread is not a thread pool thread.

Declaration
public static T GetResultSafely<T>(this Task<T> task)
Returns

<T>: The result.

Parameters
TypeNameDescription
System.Threading.Tasks.Task<<T>>taskThe target task.
Type Parameters
NameDescription
TThe type of the result.

SuppressException(Task)

Creates a new System.Threading.Tasks.Task that resolves when <code class="paramref">task</code> completes, ignoring exceptions thrown from the task, if any.

Declaration
public static Task SuppressException(this Task task)
Returns

System.Threading.Tasks.Task: A System.Threading.Tasks.Task that completes successfully when <code class="paramref">task</code> completes in any state.

Parameters
TypeNameDescription
System.Threading.Tasks.TasktaskTask to await and ignore exceptions on failure.
Remarks

Awaiting the returned System.Threading.Tasks.Task will always complete without exceptions, but awaiting <code class="paramref">task</code> will throw exceptions if it fails, even after this function is called.

Examples

<p> Wrong use of this function

var task = TaskThrowingException();
task.SuppressException();
await TaskThrowingException(); // This line will throw.

</p> <p> Correct use of this function, if waiting for the task

await TaskThrowingException().SuppressException();

</p> <p> Fire-and-forget

If not interested in the execution state of Task (fire-and-forget), simply calling this function will do. This function consumes the task's exception, so that it won't bubble up on later garbage collection.

TaskThrowingException().SuppressException();

</p>