- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 current_thread
执行器上的 foo
中生成一个任务:
extern crate futures; // version 0.1
extern crate tokio;
use futures::future::lazy;
use std::{thread, time};
use tokio::executor::current_thread::CurrentThread;
fn foo() {
tokio::spawn(lazy(|| {
println!("In foo!");
Ok(())
}));
}
fn main() {
let mut current_thread = CurrentThread::new();
current_thread.spawn(lazy(|| {
loop {
println!("In spawn!");
foo();
thread::sleep(time::Duration::from_secs(1));
}
Ok(())
}));
current_thread.run().unwrap();
}
当我运行它时,它失败了:
In spawn!
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: SpawnError { is_shutdown: true }', libcore/result.rs:945:5
stack backtrace:
0: 0x10879438f - std::sys::unix::backtrace::tracing::imp::unwind_backtrace::hd4a234eb73c9eb11
at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
1: 0x108788b9d - std::sys_common::backtrace::print::h686165a0aebbb1f5
at libstd/sys_common/backtrace.rs:71
at libstd/sys_common/backtrace.rs:59
2: 0x108797043 - std::panicking::default_hook::{{closure}}::h25aacbcb8a8273d9
at libstd/panicking.rs:205
3: 0x108796dcc - std::panicking::default_hook::h036425f579a26a8f
at libstd/panicking.rs:221
4: 0x10879758b - <std::panicking::begin_panic::PanicPayload<A> as core::panic::BoxMeUp>::get::hac9fda42d0999bf5
at libstd/panicking.rs:457
5: 0x1087971c0 - std::panicking::try::do_call::h8b3a10ecb1a21334
at libstd/panicking.rs:344
6: 0x108797182 - std::panicking::try::do_call::h8b3a10ecb1a21334
at libstd/panicking.rs:322
7: 0x1087cbac5 - <&'a T as core::fmt::Display>::fmt::h2e38aa9ebf1dda6d
at libcore/panicking.rs:71
8: 0x108771405 - core::result::unwrap_failed::h111a0aed60721615
at /Users/travis/build/rust-lang/rust/src/libcore/macros.rs:26
9: 0x10877110b - <core::result::Result<T, E>>::unwrap::h1b36496d5b4f78f0
at /Users/travis/build/rust-lang/rust/src/libcore/result.rs:782
10: 0x108771ba6 - tokio_executor::global::spawn::h95932f8a5d0c0373
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-executor-0.1.2/src/global.rs:128
11: 0x108771b26 - tokio::executor::spawn::hbdc3654dcb691a15
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/mod.rs:207
12: 0x108772a5a - ox::foo::h1a20773fe06f38f5
at src/main.rs:9
13: 0x1087729e3 - ox::main::{{closure}}::ha045cd464fd2bcd2
at src/main.rs:20
14: 0x108770de0 - <futures::future::lazy::Lazy<F, R>>::get::h6d01f86e63eb0ae6
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/future/lazy.rs:64
15: 0x108770f54 - <futures::future::lazy::Lazy<F, R> as futures::future::Future>::poll::he4dbb0cba4734268
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/future/lazy.rs:82
16: 0x1087765a4 - core::fmt::Arguments::new_v1_formatted::h535b215c9c95b52a
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/future/mod.rs:113
17: 0x1087750a4 - <futures::task_impl::Spawn<T>>::poll_future_notify::{{closure}}::he965765a8e172c4b
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/task_impl/mod.rs:289
18: 0x10877520a - <futures::task_impl::Spawn<T>>::enter::{{closure}}::hc5d84c8a0c9b9541
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/task_impl/mod.rs:363
19: 0x108774dc8 - futures::task_impl::std::set::h6d292679eb1abcd6
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/task_impl/std/mod.rs:78
20: 0x1087751a7 - <futures::task_impl::Spawn<T>>::enter::h19b2ea99bdf79995
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/task_impl/mod.rs:363
21: 0x108775039 - <futures::task_impl::Spawn<T>>::poll_future_notify::hf216aece3ea15c32
at /tmp/registry/src/github.com-1ecc6299db9ec823/futures-0.1.21/src/task_impl/mod.rs:289
22: 0x108773e03 - <tokio::executor::current_thread::scheduler::Scheduled<'a, U>>::tick::haebb55271ba68f7f
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/scheduler.rs:352
23: 0x108773d8c - <tokio::executor::current_thread::scheduler::Scheduler<U>>::tick::{{closure}}::h0fdf80d08ed0341a
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/scheduler.rs:332
24: 0x1087720fc - <tokio::executor::current_thread::Borrow<'a, U>>::enter::{{closure}}::{{closure}}::hc3a2b045d8dbd69f
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:688
25: 0x108771c7f - tokio::executor::current_thread::CurrentRunner::set_spawn::h796df298bd44491f
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:720
26: 0x10877209c - <tokio::executor::current_thread::Borrow<'a, U>>::enter::{{closure}}::hf2160ea4bc6cb70d
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:687
27: 0x108771887 - <std::thread::local::LocalKey<T>>::try_with::h07c3b54d23ac7bcf
at /Users/travis/build/rust-lang/rust/src/libstd/thread/local.rs:294
28: 0x1087716b4 - <std::thread::local::LocalKey<T>>::with::h8a95d51541a57481
at /Users/travis/build/rust-lang/rust/src/libstd/thread/local.rs:248
29: 0x108771fda - <tokio::executor::current_thread::Borrow<'a, U>>::enter::hd84e35a45b8c5f10
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:686
30: 0x108773c6d - <tokio::executor::current_thread::scheduler::Scheduler<U>>::tick::hc6a4d68c4ca62da1
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/scheduler.rs:332
31: 0x1087724bd - <tokio::executor::current_thread::Entered<'a, P>>::tick::h806caa14d1fda0e2
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:572
32: 0x1087721ac - <tokio::executor::current_thread::Entered<'a, P>>::run_timeout2::hacdc210a9580db1b
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:541
33: 0x108772450 - <tokio::executor::current_thread::Entered<'a, P>>::run::h98ebc98ef8f09a85
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:484
34: 0x108771e04 - <tokio::executor::current_thread::CurrentThread<P>>::run::h023b6fbff627efb0
at /tmp/registry/src/github.com-1ecc6299db9ec823/tokio-0.1.6/src/executor/current_thread/mod.rs:356
35: 0x108772ac0 - ox::main::h5fd6c3ac8eb3383f
at src/main.rs:25
36: 0x108772cc1 - std::rt::lang_start::{{closure}}::h8d7d3864a0a638c3
at /Users/travis/build/rust-lang/rust/src/libstd/rt.rs:74
37: 0x1087970e7 - std::panicking::try::do_call::h8b3a10ecb1a21334
at libstd/rt.rs:59
at libstd/panicking.rs:304
38: 0x1087a2cde - panic_unwind::dwarf::eh::read_encoded_pointer::hcabc31a4d46081c4
at libpanic_unwind/lib.rs:105
39: 0x10878fd00 - std::sys_common::bytestring::debug_fmt_bytestring::h020ca4453b64bdbd
at libstd/panicking.rs:283
at libstd/panic.rs:361
at libstd/rt.rs:58
40: 0x108772ca1 - std::rt::lang_start::h14c96d0aa9f67dbd
at /Users/travis/build/rust-lang/rust/src/libstd/rt.rs:74
41: 0x108772b14 - ox::main::h5fd6c3ac8eb3383f
我尝试将 current_thread
传递给 foo
但无法编译。是否可以这样做?如果可以,怎么做?
最佳答案
是的,这是可能的。 Tokio 提供documentation on how to use current_thread
:
use futures::future::lazy;
// Calling execute here results in a panic
// current_thread::spawn(my_future);
current_thread::block_on_all(lazy(|| {
// The execution context is setup, futures may be executed.
current_thread::spawn(lazy(|| {
println!("called from the current thread executor");
Ok(())
}));
Ok::<_, ()>(())
}));
您的具体问题是您没有在当前线程上生成任务:
fn foo() {
tokio::spawn(lazy(|| {
// ^^^^^^^^^^^^
相反,这应该是
fn foo() {
current_thread::spawn(lazy(|| {
// ^^^^^^^^^^^^^^^^^^^^^
但是,我不相信这段代码会实际打印 In foo!
因为外层循环永远不会创建会阻塞的 future,因此执行者没有理由去查看任何其他 future 。
关于multithreading - 是否可以在当前线程中在 Tokio 的当前线程上生成工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50195747/
我有一个 if 语句,如下所示 if (not(fullpath.lower().endswith(".pdf")) or not (fullpath.lower().endswith(tup
然而,在 PHP 中,可以: only appears if $foo is true. only appears if $foo is false. 在 Javascript 中,能否在一个脚
XML有很多好处。它既是机器可读的,也是人类可读的,它具有标准化的格式,并且用途广泛。 它也有一些缺点。它是冗长的,不是传输大量数据的非常有效的方法。 XML最有用的方面之一是模式语言。使用模式,您可
由于长期使用 SQL2000,我并没有真正深入了解公用表表达式。 我给出的答案here (#4025380)和 here (#4018793)违背了潮流,因为他们没有使用 CTE。 我很欣赏它们对于递
我有一个应用程序: void deleteObj(id){ MyObj obj = getObjById(id); if (obj == null) { throw n
我的代码如下。可能我以类似的方式多次使用它,即简单地说,我正在以这种方式管理 session 和事务: List users= null; try{ sess
在开发J2EE Web应用程序时,我通常会按以下方式组织我的包结构 com.jameselsey.. 控制器-控制器/操作转到此处 服务-事务服务类,由控制器调用 域-应用程序使用的我的域类/对象 D
这更多是出于好奇而不是任何重要问题,但我只是想知道 memmove 中的以下片段文档: Copying takes place as if an intermediate buffer were us
路径压缩涉及将根指定为路径上每个节点的新父节点——这可能会降低根的等级,并可能降低路径上所有节点的等级。有办法解决这个问题吗?有必要处理这个吗?或者,也许可以将等级视为树高的上限而不是确切的高度? 谢
我有两个类,A 和 B。A 是 B 的父类,我有一个函数接收指向 A 类型类的指针,检查它是否也是 B 类型,如果是将调用另一个函数,该函数接受一个指向类型 B 的类的指针。当函数调用另一个函数时,我
有没有办法让 valgrind 使用多个处理器? 我正在使用 valgrind 的 callgrind 进行一些瓶颈分析,并注意到我的应用程序中的资源使用行为与在 valgrind/callgrind
假设我们要使用 ReaderT [(a,b)]超过 Maybe monad,然后我们想在列表中进行查找。 现在,一个简单且不常见的方法是: 第一种可能性 find a = ReaderT (looku
我的代码似乎有问题。我需要说的是: if ( $('html').attr('lang').val() == 'fr-FR' ) { // do this } else { // do
根据this文章(2018 年 4 月)AKS 在可用性集中运行时能够跨故障域智能放置 Pod,但尚不考虑更新域。很快就会使用更新域将 Pod 放入 AKS 中吗? 最佳答案 当您设置集群时,它已经自
course | section | type comart2 : bsit201 : lec comart2 :
我正在开发自己的 SDK,而这又依赖于某些第 3 方 SDK。例如 - OkHttp。 我应该将 OkHttp 添加到我的 build.gradle 中,还是让我的 SDK 用户包含它?在这种情况下,
随着 Rust 越来越充实,我对它的兴趣开始激起。我喜欢它支持代数数据类型,尤其是那些匹配的事实,但是对其他功能习语有什么想法吗? 例如标准库中是否有标准过滤器/映射/归约函数的集合,更重要的是,您能
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
我一直在研究 PHP 中的对象。我见过的所有示例甚至在它们自己的对象上都使用了对象构造函数。 PHP 会强制您这样做吗?如果是,为什么? 例如: firstname = $firstname;
...比关联数组? 关联数组会占用更多内存吗? $arr = array(1, 1, 1); $arr[10] = 1; $arr[] = 1; // <- index is 11; does the
我是一名优秀的程序员,十分优秀!