0

StreamSocket でデータが使用可能になるたびに、そのデータを読み取るメソッドを呼び出す Task スレッドを開始するこのコードがあります。Iy はキャンセル トークンも受け取ります。

await Task.Factory.StartNew(ProcessMessage, CancelToken);

しかし、このメソッドを呼び出した後。

CancelToken.Cancel();

StreamSocket で新しいデータを取得すると、アプリは ProcessMessage メソッドを実行します。これは起こってはならないことです。それは私がそれを待っているからだと思います。

トークンがキャンセルされたときにこのタスクを停止するにはどうすればよいですか?

4

1 に答える 1

0

を発行すると、キャンセル トークンのすべてのコピーのプロパティが true に設定されますCancellationToken.Cancel()IsCancellationRequested通知を受け取ったオブジェクトは、適切な方法で応答できます。典型的なパターンはtoken.ThrowIfCancellationRequested()、ループ内のどこかで呼び出すことです。

したがって、ProcessMessageルーチンでは、次のようなものが必要です

while (processing) 
{
    // carry on your processing...

    // Poll on this property if you have to do other cleanup before throwing. 
    if (token.IsCancellationRequested)
    {
        // Clean up here, then...
        token.ThrowIfCancellationRequested();
    }
}

MSDN のドキュメントで、 await を使用してキャンセルを実装するためのガイドラインを見つけることができます。

于 2013-09-15T14:42:44.550 に答える