0

私はそのようなコードを使用しています:

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 を複数のタスクに使用できますか?

また、最初のコードが機能しない理由も興味深いです。

4

1 に答える 1