私はそのようなコードを使用しています:
private Task[] tasks;
private volatile bool stayConnected;
....
tasks[i] = Task.Factory.StartNew(() =>
{
while (stayConnected) {
...
}
}
....
public void Disconnect()
{
stayConnected = false;
Task.WaitAll(tasks);
}
私のコードは動作しません - タスクは決して終了しません。stayConnected = false
おそらくフィールドを宣言するだけでは十分ではありませんvolatile
。
作業を停止するようにタスクに通知する正しい方法は何ですか? タスクを「強制終了」するのではなく、タスクを「リクエスト」して終了させたいのです。
CancellationToken の使用を提案するこの記事を見つけました。使用する必要がありますか、それとももっと良いものを提案できますか? 1 つの CancellationToken を複数のタスクに使用できますか?
また、最初のコードが機能しない理由も興味深いです。