IBackgroundTask 类中的任务类型

tha*_*ebi 2 .net c# task-parallel-library async-await windows-runtime

我想要做

async Task DoSomething()
{
   await SomeAsyncAPI();
}

async void Run()
{
   await DoSomething();
   DoAnother();
}
Run Code Online (Sandbox Code Playgroud)

但 IBackgroundTask 类中不允许使用任务类型。我希望 DoAnother() 在 DoSomething 完成后运行。

Yuv*_*kov 5

您可以使用 awaitableIAsyncActionWindowsRuntimeSystemExtensions.AsAsyncAction

public IAsyncAction DoWorkAction()
{
    return DoWorkAsync().AsAsyncAction();
}

internal async Task DoWorkAsync()
{
    await Task.Delay(100);
}

public async void Run(IBackgroundTaskInstance taskInstance)
{
   var deferral = taskInstance.GetDeferral();
   try
   {
      await DoWorkAction();
      DoAnother();
   }
   finally
   {
      deferral.Complete();
   }
}
Run Code Online (Sandbox Code Playgroud)

对于Task<T>,使用IAsyncOperation<T>

public IAsyncOperation<string> DoMoreWorkAction()
{
    return DoMoreWorkAsync().AsAsyncOperation();
}

internal async Task<string> DoMoreWorkAsync()
{
    await Task.Delay(1000);
    return "Hello";
}

public async void Run(IBackgroundTaskInstance taskInstance)
{
   var deferral = taskInstance.GetDeferral();
   try
   {
      await DoMoreWorkAction();
      DoAnother();
   }
   finally
   {
      deferral.Complete();
   }
}
Run Code Online (Sandbox Code Playgroud)