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 完成后运行。
您可以使用 awaitableIAsyncAction和WindowsRuntimeSystemExtensions.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)