私は非同期メソッドからデータを取得します。例:2つのリストボックスがあります.1番目のリストボックスで選択されたイベントが変更された場合、非同期メソッドにリクエストを送信し、2番目のリストボックスのアイテムソースを取得します。この非同期メソッドが完了する前に、最初のListBoxで選択が変更された場合、メソッドは例外を発生させます。完了する前にprevius非同期呼び出しを中止するにはどうすればよいですか?非同期メソッドを中止する方法は?
答えて
これにはいくつかの作業が必要です。 現時点で最も簡単な方法は、Rx-Framework(Reactive Extensions)です。 これを見てsite
この道に行きたくない(学習が必要な場合)、非同期の実行を停止するためのメカニズムを提供する必要がある場合よりも、リクエスト。 System.Threading.CancellationTokenSourceまたはSystem.Threading.ManualResetEventを使用してこれを行うことができます。どちらも、実行中のタスク/スレッドへの取り消しにフラグを立てるために使用できますが、最初のものはより明確になる可能性があります。
ほとんど非同期です。リクエストはCancellationToken(発信元の.Token-Propertyを使用してください)で呼び出すことができます。そうでない場合は、独自のスレッドを使用してThrowIfCancellationRequestedで確認できます。
またはリクエストをキャンセルする必要がある場合は(e.g.not処理された)あなたのEndAsync-ハンドラでチェックすることができ、...
メソッドはWebサービスにあります。私はパラメータとコールバックメソッドを送信します – Javidan
あなたが尋ねた値を覚えていて、コールバックが変更されていればそれをチェックインします - もしあなたが持っているデータを無視するなら、あなたが応答からそれを読むことができない場合は、呼び出しにこの情報を与えることができます) – Carsten
問題を解決しました。私はbool isLoadingResourcesFinished.When私は(isLoadingResourcesFinished) isLoadingResourcesFinished = false}とコールバックメソッドで私はこれをtrueにしています。それは動作します。 – Javidan
は私たちのEventHandlerのコードを表示します。 –