我想要做什么 登录后,显示具有列表视图的主屏幕。此列表视图显示来自 API 的数据。因此,加载需要一点时间。我想在加载完成后渲染我的主屏幕,我的列表视图充满了数据。
我已经做了什么, 我有一个 api 帮助器类,可以执行 api 工作。它有一个静态方法,用于获取列表视图的数据并返回列表。这是我的 getFixtureData 方法。
static Future<List<Fixtures>> getFixtureData() async {
Map<String, String> queryParameters = {
'league': '78',
'next': '20',
};
http.Response response = await http.get(
getUrl('fixtures', queryParameters),
headers: requestHeaders,
);
print(response.body);
if (response.statusCode == 200) {
String data = response.body;
List<dynamic> result = jsonDecode(data)['response'];
for (int i = 0; i < result.length; i++) {
Fixtures fixture = Fixtures();
fixture.leagueID = jsonDecode(data)['response'][i]['league']['id'];
fixture.country = jsonDecode(data)['response'][i]['league']['country'];
fixture.leagueName = jsonDecode(data)['response'][i]['league']['name'];
fixture.fixtureID = jsonDecode(data)['response'][i]['fixture']['id'];
//get Odds to …Run Code Online (Sandbox Code Playgroud) 我有用于选择和取消选择照片的复选框。每次点击都有一个可见的加载屏幕。
_mediaList有照片资产。mediaModel有必要的方法来分别添加和删除选定和取消选定照片的路径。
Widget build(BuildContext context) {
super.build(context);
return GridView.builder(
itemCount: _mediaList.length,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 3, mainAxisSpacing: 4.0, crossAxisSpacing: 4.0),
itemBuilder: (BuildContext context, int index) {
final saved = mediaModel.getMedia().contains(
_mediaList[index].relativePath + '/' + _mediaList[index].title);
return FutureBuilder(
future: _mediaList[index].thumbDataWithSize(200, 200),
builder: (BuildContext context, snapshot) => snapshot.hasData
? GridTile(
header: saved
? Icon(Icons.check_circle, color: Colors.white,)
: Icon(Icons.check_circle_outline, color: Colors.white,),
child: GestureDetector(
child: Image.memory(
snapshot.data,
fit: BoxFit.cover,
),
onTap: () => setState(() => saved
? mediaModel.removeMedia(
_mediaList[index].relativePath +
'/' + …Run Code Online (Sandbox Code Playgroud) 我想在一个函数中执行这些操作:
1-连接套接字2-发送查询3-监听数据4-返回数据
但是当我尝试套接字时。即使我将await 放在listen 函数上,它也不会等待。它说这不是未来,而是一个 Stream 对象,但我对 Streams 不了解,所以我被困在这里。我怎样才能按照我说的去做呢?
static sendQuery({required String query,args, dimension}) async {
if(args != null)
args.forEach((element) => query = query.replaceFirst("?", element));
String ip = shared.getData("remote_ip");
int port = shared.getData("remote_port");
String data = "";
await Socket.connect(ip, port,timeout: Duration(seconds: 5)).then((soket) {
soket.write(query);
soket.listen((Uint8List buffer) async {
String _buffer = String.fromCharCodes(buffer);
data += _buffer;
},
onDone: () {});
});
print("Data has returned. Length of data: ${data.length}");
return data;}
Run Code Online (Sandbox Code Playgroud) 在 Rust 中,我有一堆想要并行执行的异步函数。处理这些函数结果的顺序很重要。我还想在这些函数可用时检索它们的结果。
\n让我不好解释一下。
\n以下是 的描述FuturesOrdered:
\n\n这个“组合器”类似于 FuturesUnordered,但它在 future 集合之上强加了一个顺序。虽然集合中的 future 将并行完成\n,但结果将仅按其原始 future 添加到队列的顺序返回。
\n
到目前为止,一切都很好。现在看这个例子:
\nlet mut ft = FuturesOrdered::new();\nft.push(wait_n(1)); // wait_n sleeps\nft.push(wait_n(2)); // for the given\nft.push(wait_n(4)); // number of secs\nft.push(wait_n(3));\nft.push(wait_n(5));\nlet r = ft.collect::<Vec<u64>>().await;\nRun Code Online (Sandbox Code Playgroud)\n由于FuturesOrdered\xc2\xa0await 直到所有future 都完成;这就是我得到的:
|--| ++\n|----| ++\n|--------| ++\n|------| ++\n|----------|++\n ++-> all results available here \nRun Code Online (Sandbox Code Playgroud)\n这就是我要的:
\n|--|++\n|----|++\n|--------|++\n|------| ++\n|----------| ++\n \nRun Code Online (Sandbox Code Playgroud)\n换句话说; 我要等待下一个未来;随着剩余的期货不断地完成。另请注意,即使任务#4 在任务#3 之前完成;由于最初的订单,它是在#3 之后处理的。
\n我怎样才能获得像这样同时执行的期货流?我希望有这样的事情: …
我似乎不明白这里的编译器错误消息。对于以下代码片段
use std::pin::Pin;
use std::future::Future;
fn give_future<'a>(x : &'a i32) -> Pin<impl Future<Output=&'a i32> + 'a> {
Box::pin(async move { x })
}
Run Code Online (Sandbox Code Playgroud)
它说以下内容
error[E0277]: `[async block@src/lib.rs]` cannot be unpinned
--> src/lib.rs:7:47
|
| fn give_future<'a>(x : &'a i32) -> Pin<impl Future<Output=&'a i32> + 'a> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `Unpin` is not implemented for `[async block@src/lib.rs]`
|
= note: consider using the `pin!` macro
consider using `Box::pin` if you need to access the pinned value outside of the current …Run Code Online (Sandbox Code Playgroud) 我已经使用Javascript了一段时间,我喜欢它的异步操作,使用回调或承诺和期货.现在我需要使用OpenMP,但未能找到对这些功能的任何支持.
OpenMP是否支持回调和/或期货?
在这个文档中看到,有一个演示片段:
std::packaged_task<int()> task([]{ return 7; }); // wrap the function
std::future<int> f1 = task.get_future(); // get a future
std::thread t(std::move(task)); // launch on a thread
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我像这样重写代码片段,是否存在任何潜在的问题(竞争条件):
std::packaged_task<int()> task([]{ return 7; }); // wrap the function
std::thread t(std::move(task)); // firstly launch on a thread, and then gets a future
std::future<int> f1 = task.get_future(); // get a future
Run Code Online (Sandbox Code Playgroud)
更新1 :我理解 Nicol Bolas 的答案,如果我像这样重写代码片段,是否存在任何潜在的问题(竞争条件):
std::packaged_task<int()> task([]{ return 7;});
thread_callablefunc_queue.push_back(task); //task may be popped and run by another thread at once, …Run Code Online (Sandbox Code Playgroud) 我偶然发现了Future<?>.是什么 '?'