回答編集履歴

4

あいまいな部分修正

2018/03/06 03:56

投稿

gazette2
gazette2

スコア179

test CHANGED
@@ -48,6 +48,10 @@
48
48
 
49
49
  そしてTask.Delay(100)の部分だけが別のスレッドで実行されます。
50
50
 
51
+ (もっと正確にはTask.Delay(100)の中のどこかでスレッドで実行される部分があります。sh_akiraさんの説明を参考)
52
+
53
+
54
+
51
55
  しかし、普通のデバッガーの設定ではTask.Delay(100)の中身を見ることが出来ないので
52
56
 
53
57
  スレッドは生成されましたがすぐ無くなってしまってそれが確認することが出来ない…

3

誤字

2018/03/06 03:56

投稿

gazette2
gazette2

スコア179

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  が、それをデバッガーで確認することができないだけです。
12
12
 
13
- **関数をasyncに指定してもの関数の全てがasyncになるわけではありません。**
13
+ **関数をasyncに指定してもの関数の全てがasyncになるわけではありません。**
14
14
 
15
15
  **async関数はawaitが出現するところまではSyncモードで実行されます。**
16
16
 

2

要請に応じて追加します。

2018/03/06 03:07

投稿

gazette2
gazette2

スコア179

test CHANGED
@@ -1 +1,99 @@
1
1
  関数をasyncに指定しても関数の中でawaitが利用されない場合にはただの一般関数(Sync)になります。
2
+
3
+
4
+
5
+ 要請に応じて追加します。
6
+
7
+
8
+
9
+ この場合は確かに非同期の処理されました
10
+
11
+ が、それをデバッガーで確認することができないだけです。
12
+
13
+ **関数をasyncに指定してもこの関数の全てがasyncになるわけではありません。**
14
+
15
+ **async関数はawaitが出現するところまではSyncモードで実行されます。**
16
+
17
+
18
+
19
+ つまり
20
+
21
+ ```ここに言語を入力
22
+
23
+ private async Task<int> GetintValue()
24
+
25
+ {
26
+
27
+ a++;
28
+
29
+ await Task.Delay(100);
30
+
31
+ return a;
32
+
33
+ }
34
+
35
+ ```
36
+
37
+
38
+
39
+ この関数の場合
40
+
41
+ a++;
42
+
43
+ return a;
44
+
45
+ はMainスレッドで処理されます。
46
+
47
+
48
+
49
+ そしてTask.Delay(100)の部分だけが別のスレッドで実行されます。
50
+
51
+ しかし、普通のデバッガーの設定ではTask.Delay(100)の中身を見ることが出来ないので
52
+
53
+ スレッドは生成されましたがすぐ無くなってしまってそれが確認することが出来ない…
54
+
55
+ ということです。
56
+
57
+
58
+
59
+ なので、そのTask.Delay(100)の部分をこんな風に還ってテストしてみましょう。
60
+
61
+ ```ここに言語を入力
62
+
63
+ private async Task<int> GetintValue()
64
+
65
+ {
66
+
67
+ // Sync
68
+
69
+ int bbb = 0; // this code will be running on Main thread
70
+
71
+
72
+
73
+ // Async
74
+
75
+ int testValue = await Task.Run(() =>
76
+
77
+ {
78
+
79
+ int a = 1; // this code will be running on the sperated thread
80
+
81
+ a++;
82
+
83
+ return a;
84
+
85
+ });
86
+
87
+
88
+
89
+ return testValue;
90
+
91
+ }
92
+
93
+ ```
94
+
95
+
96
+
97
+ bbb = 0;
98
+
99
+ まではMainで実行されますがそのあと別のスレッドを作るのを確認できます。

1

えーら

2018/03/06 03:06

投稿

gazette2
gazette2

スコア179

test CHANGED
@@ -1 +1 @@
1
- 関数をasyncに指定しても関数の中awaitが利用されない場合にはただの一般関数(Sync)になります。
1
+ 関数をasyncに指定しても関数の中awaitが利用されない場合にはただの一般関数(Sync)になります。