問題タブ [iota]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
50 参照

multithreading - Rust tokio: 生成されたスレッドで非同期関数を待機しています

新しい tokio スレッド内で async-function を呼び出そうとすると、一部の関数でエラーが発生します。

この最小限の例では、クレート tokio と iota-streams が使用されています。メソッド send_announce() は非同期で、アドレスを返します。このメソッドを待機すると、std::Marker::Send 特性が実装されていないことを示すコンパイル エラーが発生します。

私の理解では、問題は 1 つ以上の Sync/Send トレイトの実装の欠如であり、スレッド間でデータを渡すことができるようにするために、Rust はチェーン全体に Sync と Send を実装する必要があります。

ドキュメントには、言及された構造体には自動特性として Sync と Send が実装されていると記載されています: (iota_streams_core::Error、wrap::Context、TangleAddress、BinaryBody、command::sizeof::Context、KeccakF1600 ...)

メイン スレッド内で同じ関数を呼び出すと、正常に動作します。

send_announce() から得られた未来を Box にラップし、Send トレイト unsafe を実装し、応答を struct にラップしようとしましたが、コンパイル エラーを変更することはありませんでした。

この文脈では、動的な将来の反応は何らかの問題があるようです。私はさびに慣れていないので、この問題を解決する方法について私が得ることができるあらゆる助けやアイデアをいただければ幸いです。このアプローチは可能ですか?

私のプログラムは呼び出しによって呼び出され、別のスレッドで要求を処理する必要があります。このスレッド内には、たとえばこのお知らせリンクが生成されます。

示されている例は、問題を重要な部分に絞り込むための最小限の例です。Ubuntu で錆安定とナイトリーでテスト済み。