flutter - 异步任务不在 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 中的异步方法?
解决方案
异步化非异步事物的方法是通过完成者。您创建一个完成者,等待它的未来并在未来完成它。
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;
推荐阅读
- c# - .NET Core - 附件导致发送邮件失败
- ruby-on-rails - 如何不不断更改 Active Storage 附件 URL?
- f# - Simple explanation of List.Fold and List.Foldback in F#
- javascript - React 单选按钮 onChange 事件在第一次更改单选按钮时不绑定
- python - Python(intertools?)迭代两个相关列表
- javascript - 如何将字符串提示输入保存到数组中
- ios - MKMapView 看起来偏黄,如何改变颜色?
- apache-kafka - 为什么 KSQL 流不从代理中的主题消息中返回/显示数据?
- r - 在不使用嵌套应用的情况下将函数映射到列和行
- bpmn - 将局部变量映射到 Camunda 中的实例变量