无法在 backgroundTask 调用 Task.Run()

Can not call Task.Run() at backgroundTask

我想在后台任务的线程中做一些事情,所以我尝试使用 Task.Run() 但它不起作用。

任何人都可以告诉我另一种在后台任务中创建线程的方法。

这是我的代码:

   public sealed class KatzBackgroundTask : IBackgroundTask
   {

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
        string content = notification.Content;
        System.Diagnostics.Debug.WriteLine(content);
        testLoop();
    }

    async void testLoop()
    {
        await Task.Run(() =>
       {
           int myCounter = 0;
           for (int i = 0; i < 100; i++)
           {
               myCounter++;
                //String str = String.Format(": {0}", myCounter);
                Debug.WriteLine("testLoop runtimeComponent : " + myCounter);
           }
       }
       );

    }
}

当我移除await Task.Run() for循环时可以运行正常,但当我不移除它时,for循环不能运行。

对于 运行 任务或在您的后台任务中使用 await - 异步模式,您需要使用延迟,否则您的任务可能会在到达 Run 方法末尾时意外终止。

在官方文档中阅读更多内容here

以下是在代码中实现任务延迟的方法:

public sealed class KatzBackgroundTask : IBackgroundTask
{
    BackgroundTaskDeferral _deferral = taskInstance.GetDeferral(); 
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
        string content = notification.Content;
        System.Diagnostics.Debug.WriteLine(content);
        await testLoop();
        _deferral.Complete();
    }

    async Task testLoop()
    {
        await Task.Run(() =>
        {
           int myCounter = 0;
           for (int i = 0; i < 100; i++)
           {
               myCounter++;
               //String str = String.Format(": {0}", myCounter);
              Debug.WriteLine("testLoop runtimeComponent : " + myCounter);
           }
       }
   )

}