Flutter并发执行插件concurrent_executor的使用
Flutter并发执行插件concurrent_executor的使用
使用
一个简单的使用示例:
import 'dart:io';
import 'dart:isolate';
import 'package:concurrent_executor/concurrent_executor.dart';
void main() async {
// 创建一个可以同时运行3个任务的执行器
var executor = await Executor.createExecutor(3);
var foo = Foo();
executor.submit(foo).then((value) => value, onError: (e, s) {
print(e);
print(s);
});
var res = executor.submit(foo);
print(res);
var foo2 = Foo2();
var res222 = executor.submit(foo2);
print(await res222);
var res22 = executor.submit(foo2);
print(await res22);
var foo3 = Foo3();
var res3 = executor.submit(foo3);
print(res3);
var res33 = executor.submit(foo3);
print(res33);
var foo33 = Foo3();
var res333 = executor.submit(foo33);
print(await res333);
var foo4 = Foo4();
foo4.stat = 'aaaaccc';
var res44 = executor.submit(foo4);
print(res44);
var foo44 = Foo4();
foo44.stat = 'vvvveee';
var res444 = executor.submit(foo44);
print(await res444);
var foo5 = Foo5();
foo5.stat = 99;
var res5 = executor.submit(foo5);
print(await res5);
var foo6 = Foo6();
foo6.stat = 'kkkkttt';
var res6 = executor.submit(foo6);
print(res6);
// region pause
var receivePort = ReceivePort();
await Isolate.spawn(pause, receivePort.sendPort);
await for (var _ in receivePort) {
break;
}
print('pause close');
receivePort.close();
// endregion
//await executor.close(CloseLevel.immediately);
//executor.close(CloseLevel.immediately);
//await executor.close(CloseLevel.afterRunningFinished);
// close default is afterRunningFinished
await executor.close();
//await executor.close(CloseLevel.afterAllFinished);
//executor.close(CloseLevel.afterAllFinished);
print(
'the following ${executor.unfinishedTasks.length} tasks has not executed completely:');
print(executor.unfinishedTasks.map((e) => e.runtimeType));
}
// 定义不同的任务类
class Foo extends ConcurrentTask<void> {
[@override](/user/override)
void run() {
print('${Isolate.current.debugName}-executeFoo');
sleep(Duration(seconds: 1));
}
}
class Foo2 extends ConcurrentTask<int> {
[@override](/user/override)
int run() {
print('${Isolate.current.debugName}-executeFoo2');
sleep(Duration(seconds: 1));
return 3;
}
}
class Foo3 extends ConcurrentTask<Future<int>> {
[@override](/user/override)
Future<int> run() async {
print('${Isolate.current.debugName}-executeFoo3');
return await Future.value(9);
}
}
class Foo4 extends ConcurrentTask<int> {
Object? stat = 888;
[@override](/user/override)
int run() {
print('${Isolate.current.debugName}-executeFoo4-$stat');
sleep(Duration(seconds: 1));
return 344;
}
}
class Foo5 extends ConcurrentTask<int> {
var stat = 85288;
[@override](/user/override)
int run() {
print('${Isolate.current.debugName}-executeFoo5-$stat');
sleep(Duration(seconds: 1));
return stat;
}
}
class Foo6 extends ConcurrentTask<int> {
String stat = '';
[@override](/user/override)
int run() {
print('${Isolate.current.debugName}-executeFoo6-$stat');
sleep(Duration(seconds: 1));
return 6663;
}
}
// 暂停执行的函数
void pause(SendPort message) {
sleep(Duration(seconds: 1));
message.send('close');
}
更多关于Flutter并发执行插件concurrent_executor的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter并发执行插件concurrent_executor的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter中使用concurrent_executor
插件来并发执行任务的示例代码。concurrent_executor
插件允许你并发地执行多个Future任务,并收集它们的结果。
首先,确保你已经在pubspec.yaml
文件中添加了concurrent_executor
依赖:
dependencies:
flutter:
sdk: flutter
concurrent_executor: ^latest_version # 请替换为最新的版本号
然后运行flutter pub get
来安装依赖。
以下是一个完整的Flutter应用程序示例,它演示了如何使用concurrent_executor
来并发执行一些任务:
import 'package:flutter/material.dart';
import 'package:concurrent_executor/concurrent_executor.dart';
import 'dart:async';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Concurrent Executor Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _result = 'Press the button to start tasks';
Future<void> _executeTasks() async {
// 创建一个ConcurrentExecutor实例
final executor = ConcurrentExecutor();
// 定义一些模拟的异步任务
Future<String> task1() async {
await Future.delayed(Duration(seconds: 2));
return 'Task 1 completed';
}
Future<String> task2() async {
await Future.delayed(Duration(seconds: 3));
return 'Task 2 completed';
}
Future<String> task3() async {
await Future.delayed(Duration(seconds: 1));
return 'Task 3 completed';
}
// 使用ConcurrentExecutor并发执行任务
List<Future<String>> tasks = [task1(), task2(), task3()];
List<String> results = await executor.executeAll(tasks);
// 更新UI
setState(() {
_result = results.join('\n');
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Concurrent Executor Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_result,
style: TextStyle(fontSize: 20),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _executeTasks,
child: Text('Execute Tasks'),
),
],
),
),
);
}
}
在这个示例中,我们创建了三个模拟的异步任务,每个任务都会延迟一段时间然后返回一个字符串。我们使用ConcurrentExecutor
的executeAll
方法来并发执行这些任务,并收集它们的结果。最后,我们将结果显示在UI上。
当你运行这个应用程序并点击“Execute Tasks”按钮时,你会看到所有任务并发执行,并在UI上按顺序显示它们的结果。