首页 > 解决方案 > 异步任务不在 WorkManagers CallbackDispatcher 中工作

问题描述

我正在将 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 中的异步方法?

标签: flutterasynchronousflutter-plugin

解决方案


异步化非异步事物的方法是通过完成者。您创建一个完成者,等待它的未来并在未来完成它。

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;


推荐阅读