回答編集履歴

2

資料の誤りについて取り消し線を挿入

2018/09/19 15:10

投稿

testset
testset

スコア221

test CHANGED
@@ -1,6 +1,6 @@
1
1
  調べた限り、Taskを使用するのはよくないと思われます。
2
2
 
3
- - [C#2010でのTaskの強制停止 - MSDNフォーラム](https://social.msdn.microsoft.com/Forums/ja-JP/cd5b3381-aef9-451c-a67a-21232e7553ef/c20101239112398task1239824375210462057227490?forum=csharpgeneralja)
3
+ - ~~[C#2010でのTaskの強制停止 - MSDNフォーラム](https://social.msdn.microsoft.com/Forums/ja-JP/cd5b3381-aef9-451c-a67a-21232e7553ef/c20101239112398task1239824375210462057227490?forum=csharpgeneralja)~~
4
4
 
5
5
 
6
6
 
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- - スレッド生成にはコストがかかるので、大量に動かす場合などは、ThreadPoolを使用する
13
+ - スレッド生成にはコストがかかる~~ので、大量に動かす場合などは、ThreadPoolを使用する~~
14
14
 
15
15
  - スレッド内の例外は自分でハンドリングすること(Abortの際に呼び出し側で例外が発生することがある)
16
16
 

1

没となったコードを記載

2018/09/19 15:10

投稿

testset
testset

スコア221

test CHANGED
@@ -67,3 +67,113 @@
67
67
 
68
68
 
69
69
  ```
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+ ### 添付資料
84
+
85
+
86
+
87
+ 失敗例を上げておきます。想定では途中で例外が発生し、タスクが中断のはずが、動き続けます。
88
+
89
+
90
+
91
+ ```Program.cs
92
+
93
+ var sw = Stopwatch.StartNew();
94
+
95
+ Console.WriteLine("[{0}]starting", sw.Elapsed);
96
+
97
+ using (var cts = new CancellationTokenSource())
98
+
99
+ using (var task = Task.Factory.StartNew(() =>
100
+
101
+ {
102
+
103
+ for (var i = 0; i < 100; i++)
104
+
105
+ {
106
+
107
+ Thread.Sleep(1000);
108
+
109
+ Console.WriteLine("[{0}]waiting... {1} {2}", sw.Elapsed, i, cts.Token.IsCancellationRequested);
110
+
111
+ }
112
+
113
+ Console.WriteLine("[{0}]done", sw.Elapsed);
114
+
115
+ }, cts.Token)
116
+
117
+ )
118
+
119
+ {
120
+
121
+ Console.WriteLine("[{0}]started", sw.Elapsed);
122
+
123
+ if (!task.Wait(10 * 1000))
124
+
125
+ {
126
+
127
+ Console.WriteLine("[{0}]fire abort", sw.Elapsed);
128
+
129
+ //キャンセルを伝え、直ちに例外を発生させる
130
+
131
+ cts.Cancel(true);
132
+
133
+ }
134
+
135
+ // タスクが完了(キャンセル)するはず
136
+
137
+ Console.WriteLine("[{0}]task finished", sw.Elapsed);
138
+
139
+ Thread.Sleep(1000);
140
+
141
+ //ここを抜けるときに例外発生(InvalidOperation、タスクが止まらない)
142
+
143
+ }
144
+
145
+ ```
146
+
147
+ ```処理結果.txt
148
+
149
+ [00:00:00.0001531]starting
150
+
151
+ [00:00:00.0358243]started
152
+
153
+ [00:00:01.0408594]waiting... 0 False
154
+
155
+ [00:00:02.0419494]waiting... 1 False
156
+
157
+ [00:00:03.0422047]waiting... 2 False
158
+
159
+ [00:00:04.0425413]waiting... 3 False
160
+
161
+ [00:00:05.0429124]waiting... 4 False
162
+
163
+ [00:00:06.0433045]waiting... 5 False
164
+
165
+ [00:00:07.0439868]waiting... 6 False
166
+
167
+ [00:00:08.0447972]waiting... 7 False
168
+
169
+ [00:00:09.0456474]waiting... 8 False
170
+
171
+ [00:00:10.0386241]fire abort
172
+
173
+ [00:00:10.0388371]task finished
174
+
175
+ [00:00:10.0459762]waiting... 9 True
176
+
177
+ [00:00:11.0516456]waiting... 10 True
178
+
179
+ ```