回答編集履歴
1
別案の提示とGitHubのリンク変更
test
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
|
6
6
|
|
7
|
-
[こちら](https://github.com/techno-tanoC/progress_test)のソースで言うと、progress.rsの97行目で`Mutex`の`lock()`を呼び出し、`poll()`でlockの獲得をしようとしていますが、これが`Pending`を返した場合に今回の現象が発生しているようです。
|
7
|
+
[こちら](https://github.com/techno-tanoC/progress_test/tree/68d09a5849890d8942b3b6158da0e3b6bf51f690)のソースで言うと、progress.rsの97行目で`Mutex`の`lock()`を呼び出し、`poll()`でlockの獲得をしようとしていますが、これが`Pending`を返した場合に今回の現象が発生しているようです。
|
8
8
|
|
9
9
|
|
10
10
|
|
@@ -29,3 +29,17 @@
|
|
29
29
|
```
|
30
30
|
|
31
31
|
と入れると途中で停止すること無く正常に動作しました。
|
32
|
+
|
33
|
+
|
34
|
+
|
35
|
+
[追記]
|
36
|
+
|
37
|
+
別案として、この用途であれば`tokio::sync::watch`を使うのが良いかなと思いました。以下参照ください。
|
38
|
+
|
39
|
+
[progress_test](https://github.com/i-poper/progress_test/tree/watch)
|
40
|
+
|
41
|
+
フォーマットしてしまったので差分がわかりにくいですが、`poll_write()`でダウンロードの状態が変わったら`watch::Sender.broadcast()`で通知しています。
|
42
|
+
|
43
|
+
ダウンロードキャンセルは、逆にUIスレッド側?から`watch::Sender.broadcast()`で通知します。
|
44
|
+
|
45
|
+
`poll_write()`での参照は`recv()`だと`await`が必要になってしまうので、`watch::Receiver.borrow()`で参照します。
|