异步任务在WorkManager的CallbackDispatcher中无法正常工作。

3
我正在使用WorkManager进行后台服务。我的代码如下:
void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) async {
    switch (task) {
      case "uploadLocalData":
        print("this method was called from background!");
        await BackgroundProcessHandler().uploadLocalData();
        print("background Executed!");
        return true;
       
        break;
      case Workmanager.iOSBackgroundTask:
        print("iOS background fetch delegate ran");
        return true;
        break;
    }
    return false;
   
  });
}

有没有办法在executeTask中等待异步方法?
1个回答

2
通过完成器来实现非异步事物的异步化。您可以创建一个完成器,等待其未来并在未来中完成它。
Completer uploadCompleter = Completer();

void callbackDispatcher() {
  Workmanager.executeTask((task, inputData) async {
    switch (task) {
      case "uploadLocalData":
        print("this method was called from background!");
        await BackgroundProcessHandler().uploadLocalData();
        print("background Executed!");
        uploadCompleter.complete();
        return true;
       
        break;
      case Workmanager.iOSBackgroundTask:
        print("iOS background fetch delegate ran");
        return true;
        break;
    }
    return false;
   
  });
}

// somewhere else
await uploadCompleter.future;


刚刚在uploadCompleter.complete();上面添加了await uploadCompleter.future;,这对我来说完美地解决了问题。谢谢 @GazihanAlankus - undefined
我很高兴能帮到你,但是我不明白 :) 如果在uploadCompleter.complete();之前等待uploadCompleter.future;,它永远不会执行到uploadCompleter.complete();,对吗? - undefined
我也很震惊,因为从概念上来说是错误的,但对我来说却起作用了。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接