teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

実現したいことを、詳細に書きました。

2020/11/15 05:48

投稿

test189
test189

スコア1

title CHANGED
File without changes
body CHANGED
@@ -5,6 +5,7 @@
5
5
  メソッドGetValueAsyncを作成したのですが、
6
6
  GetValueAsync内のwhileループでCPU使用率がとても高くなってしまいます。
7
7
 
8
+
8
9
  ### 該当のソースコード
9
10
 
10
11
  ```csharp
@@ -73,9 +74,10 @@
73
74
 
74
75
  ```
75
76
 
76
- ### 補足
77
+ ### 補足(実現したいこと)
77
78
  barの値の取得に関してですが、
78
- Btn_Click内でGetValueAsyncが呼ばれたタイミングのbarの値が取得できればそれでいいです。
79
+ ~~Btn_Click内でGetValueAsyncが呼ばれたタイミングのbarの値が取得できればそれでいいです。~~
80
+ Btn_Click内でGetValueAsyncが呼ばれたタイミングのbarの値(ただし、barが更新されていなければ、更新されるまで待つ)を取得したいです。
79
81
 
80
82
 
81
83
  ### 解決策?

1

いただいた回答に基づいて、改良してみました。

2020/11/15 05:48

投稿

test189
test189

スコア1

title CHANGED
File without changes
body CHANGED
@@ -53,7 +53,7 @@
53
53
 
54
54
  詳しい方おられましたら、ご教授お願いいたします。
55
55
 
56
- ```
56
+ ```csharp
57
57
  private async Task<string> GetValueAsync()
58
58
  {
59
59
  var value = await Task.Run(async () =>
@@ -75,4 +75,26 @@
75
75
 
76
76
  ### 補足
77
77
  barの値の取得に関してですが、
78
- Btn_Click内でGetValueAsyncが呼ばれたタイミングのbarの値が取得できればそれでいいです。
78
+ Btn_Click内でGetValueAsyncが呼ばれたタイミングのbarの値が取得できればそれでいいです。
79
+
80
+
81
+ ### 解決策?
82
+
83
+ いただいた回答に基づいて、コードを改良してみました。
84
+
85
+ ```csharp
86
+
87
+ private readonly AutoResetEvent condition = new AutoResetEvent(false);
88
+
89
+ private async Task<string> GetValueAsync()
90
+ {
91
+ await Task.Run(() =>
92
+ {
93
+ condition.WaitOne();
94
+ });
95
+ return this._originaltext;
96
+ }
97
+
98
+ ```
99
+ Hogehogeメソッドのとこには、
100
+ ```this._foo = bar;```の下に、```condition.Set();```を記述。