質問編集履歴
4
修正依頼があった点の変更
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
具体性を上げました.
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
|
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>
|
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 t
|
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
分かりやすくするために加筆修正を行いました.
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
誤字を修正しました
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
|
```
|