Task Instance
Structure
To standardize the approach regardless of which task modifier you’re using, every task modifier will use the same underlying TaskInstance structure inside of a svelte store.
A TaskInstance comprises of:
error: if an error is thrown inside the task instance, it will be found herehasStarted: it is possible for the task instance to be in a queue, waiting to start. This property will change totruethe instant the task instance has startedisCanceled: whether the task instance was canceledisError: whether the task instance throw an error before completingisRunning: whether the task instance is currently runningisSuccessful: whether the task instance completed successfullyvalue: if the task instance completed successfully, this will be the return value
And for those of you that prefer to read code, here is the typing of the TaskInstance:
type TaskInstance<TReturn> = {  /**   * If an error is thrown inside the task instance, it will be found here.   */  error?: Error;
  /**   * Indicates whether the task instance has started.   */  hasStarted: boolean;
  /**   * Indicates whether the task instance was canceled.   */  isCanceled: boolean;
  /**   * Indicates whether the task instance threw an error before completing.   */  isError: boolean;
  /**   * Indicates whether the task instance is currently running.   */  isRunning: boolean;
  /**   * Indicates whether the task instance completed successfully.   */  isSuccessful: boolean;
  /**   * If the task instance completed successfully, this will be the return value.   */  value?: TReturn;};You can access these properties just as you would with any other Svelte store:
<script lang="ts">  import { task } from '@sheepdog/svelte';
  const myTask = task(async () => {    // your code  });
  let lastInstance;</script>
<button on:click={() => {  lastInstance = myTask.perform()  }}> Press me </button>
  {#if $lastInstance.isRunning}    Last instance is running!  {/if}
<button on:click={() => {  const myInstance = myTask.perform()  myInstance.get() // { isRunning: true, hasStarted: true, ... }  }}> Press me </button>Cancellation
Each task instance is also packaged with a cancel function that can be used to cancel itself.
<script lang="ts">  import { task } from '@sheepdog/svelte';
  const myTask = task(async () => {    // your code  });
  let lastInstance;</script>
<button on:click={() => {  lastInstance = myTask.perform()  }}> Press me </button>
<button on:click={() => {  lastInstance?.cancel()  }}> Cancel </button>