質問編集履歴

4

修正依頼があった点の変更

2022/08/31 23:00

投稿

terullet
terullet

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,5 @@
1
+ WPFで,通信を伴うアプリケーションを作ろうとしています.
2
+
1
3
  タイトルの通り,戻り値のいらないメソッドを非同期にしたうえで待機したいのですが,
2
4
  戻り値を返すように呼び出し先のメソッドを変更する以外に何か良い方法はありますでしょうか?
3
5
 
@@ -24,7 +26,7 @@
24
26
  }
25
27
  }
26
28
  ```
27
- 下のように書き換えずに済む方法があるかを知りたいです.
29
+ 下のように書き換えずに(`return` を書かずに)済む方法があるかを知りたいです.
28
30
  ```cs
29
31
  public class Client
30
32
  {

3

具体性を上げました.

2022/08/31 15:08

投稿

terullet
terullet

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,15 +1,60 @@
1
+ タイトルの通り,戻り値のいらないメソッドを非同期にしたうえで待機したいのですが,
1
- タイトルの通り,戻り値のいらない非同期メソッド待機したいのですが,戻り値を返すように呼び出し先のメソッドを変更する以外に何か良い方法はありますでしょうか?
2
+ 戻り値を返すように呼び出し先のメソッドを変更する以外に何か良い方法はありますでしょうか?
2
3
 
3
- 具体例挙げとすれば呼び出し先の関数である次のようなメソッドを非同期にする際,
4
+ 通信確立すための,次のようなメソッドを非同期にする際,
4
5
  ```cs
6
+ public class Client
7
+ {
8
+ // 外部からはこのプロパティで接続状態を確認します.
9
+ public ENUM_Status Status { get; private set; };
10
+
5
- public void MethodAsync() {
11
+ public void OpenAsync()
12
+ {
13
+ // 文法的にはありえないことですが,
14
+ // 時間のかかる処理を行って結果を得ているものと考えていただければと思います.
6
- Thread.Sleep(10000); // 処理
15
+ bool isSuccessful = Thread.Sleep(10000);
16
+ if (isSuccessful)
17
+ {
18
+ this.Status = ENUM_Status.Connected;
19
+ }
20
+ else
21
+ {
22
+ this.Status = ENUM_Status.Disconnected;
23
+ }
24
+ }
7
25
  }
8
26
  ```
9
27
  下のように書き換えずに済む方法があるかを知りたいです.
10
28
  ```cs
29
+ public class Client
30
+ {
31
+ // 外部からはこのプロパティで接続状態を確認します.
32
+ public ENUM_Status Status { get; private set; };
33
+
11
- public async Task<bool> MethodAsync() {
34
+ public async Task<bool> OpenAsync()
35
+ {
36
+ // 文法的にはありえないことですが,
37
+ // 時間のかかる処理を行って結果を得ているものと考えていただければと思います.
12
- Thread.Sleep(10000); // 処理
38
+ bool isSuccessful = Thread.Sleep(10000);
39
+ if (isSuccessful)
40
+ {
41
+ this.Status = ENUM_Status.Connected;
42
+ }
43
+ else
44
+ {
45
+ this.Status = ENUM_Status.Disconnected;
46
+ }
47
+ // プロパティを直接確認すればすむので,戻り値の情報は不要ですが,
48
+ // 待機するために Task<> を返すようにすると,戻り値が必要なので返しています.
13
- return true; // asyncのために不要な値を返す.
49
+ return this.Staus == ENUM_Status.Connected;
50
+ }
14
51
  }
15
52
  ```
53
+
54
+ この場合,呼び出し元は次のようになります.
55
+ ```cs
56
+ Client client = new Client();
57
+ await client.OpenAsync(); // 戻り値を格納しない.
58
+
59
+ // 接続以降の処理.
60
+ ```

2

分かりやすくするために加筆修正を行いました.

2022/08/31 14:33

投稿

terullet
terullet

スコア2

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,6 @@
1
1
  タイトルの通り,戻り値のいらない非同期メソッドを待機したいのですが,戻り値を返すように呼び出し先のメソッドを変更する以外に何か良い方法はありますでしょうか?
2
2
 
3
- 具体例を挙げるとすれば,呼び出し先の関数である次のコードを,
3
+ 具体例を挙げるとすれば,呼び出し先の関数である次のようなメソッドを非同期にする際
4
4
  ```cs
5
5
  public void MethodAsync() {
6
6
  Thread.Sleep(10000); // 処理
@@ -8,8 +8,8 @@
8
8
  ```
9
9
  下のように書き換えずに済む方法があるかを知りたいです.
10
10
  ```cs
11
- public Task<bool> MethodAsync() {
11
+ public async Task<bool> MethodAsync() {
12
12
  Thread.Sleep(10000); // 処理
13
- return true;
13
+ return true; // asyncのために不要な値を返す.
14
14
  }
15
15
  ```

1

誤字を修正しました

2022/08/31 14:28

投稿

terullet
terullet

スコア2

test CHANGED
@@ -1 +1 @@
1
- 戻り値浮揚の非同期処理を待機したいです
1
+ 戻り値不要の非同期処理を待機したいです
test CHANGED
@@ -1,15 +1,15 @@
1
1
  タイトルの通り,戻り値のいらない非同期メソッドを待機したいのですが,戻り値を返すように呼び出し先のメソッドを変更する以外に何か良い方法はありますでしょうか?
2
2
 
3
- 具体例を挙げるとすれば,次のコードを,
3
+ 具体例を挙げるとすれば,呼び出し先の関数である次のコードを,
4
4
  ```cs
5
5
  public void MethodAsync() {
6
- Thread.Sleep(10000);
6
+ Thread.Sleep(10000); // 処理
7
7
  }
8
8
  ```
9
9
  下のように書き換えずに済む方法があるかを知りたいです.
10
10
  ```cs
11
11
  public Task<bool> MethodAsync() {
12
- Thread.Sleep(10000);
12
+ Thread.Sleep(10000); // 処理
13
13
  return true;
14
14
  }
15
15
  ```