問題タブ [cancellationtokensource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - CancellationToken.ThrowIfCancellationRequested がスローされない
タスクベースの非同期操作を実装するための非常に単純なアプリを作成しました。
クライアント コードは、Task を返すメソッドを呼び出します。そのメソッドに CancellationToken を渡すのですが、途中で CancellationToken.ThrowIfCancellationRequested メソッドを呼び出しても、キャンセルすると OperationCancelledException がスローされることはありません。
自分でテストしたい場合は、ここからソリューション全体をダウンロードできます: https://github.com/stevehemond/asynctap-example
コードは次のとおりです。
CancellationToken を Tasks に渡すことについて、私が理解していないことがあるはずです...何がわからないのですか。
c# - 子タスクをキャンセルするときに親タスクのみをキャンセルする方法は?
パラメータとしてキャンセル トークンを使用した非同期コントローラ アクションを取得しました。
SearchModel.GetRemains
メソッドは他の 3 つの非同期メソッド (Web サービス) を呼び出し、そのうちの 1 つがタイムアウトによってキャンセルされると、他のメソッドは実行されません。
その 3 つの Web サービスのすべてで、非同期でもデータベースに接続します。3 番目のタスクの子メソッドでエラーが発生async
したときに、2 つのタスクを機能させるにはどうすればよいですか?async
async
親メソッドからすべてのメソッドにキャンセル トークン パラメーターを渡します。
そして、子アクションが親アクションの実行にまったく影響を与えたくない場合はどうなりますか? しかし、親がキャンセルされた場合にキャンセルしたいですか? 私は何をすべきか?
ご清聴ありがとうございました
c# - 非同期WCF呼び出しをキャンセルするには?
私は、新しい .NET 4.5 CancellationToken メカニズムに基づいて WCF 呼び出しキャンセルを実装する方法を見つけようと、しばらく試みてきました。私が見つけたすべてのサンプルは WCF ベースではなく、サービスの境界を越えていません。
私のサービス:
私のクライアント (デスクトップ アプリ):
自動生成されたプロキシを使用する:
このタスクをキャンセルするにはどうすればよいですか? .NET 4.5+ の WCF に適用できる具体的な例を教えてください
編集:
以下の回答は、技術的な理由から不可能であることを示しているようです。したがって、サービスを作成ContextMode=Session
し、(別のサービス呼び出しで) という静的変数を設定するとcancellationPending=true
、元の呼び出しはこの段階でまだ実行されており、定期的にその変数をチェックします。それでもキャンセルできないのでしょうか?それでも無理でしょう?もしそうなら、なぜですか?
c# - FileStream.ReadAsync( ... ) リクエストをキャンセルするにはどうすればよいですか?
以下を考えると:
T
常に終了して戻りますRanToCompletion
。
私のユースケースは、いつでも開いたり閉じたりできるデバイスから読み取っているという点で、やや複雑です (したがって、ファイルから直接読み取るのではなく、安全なファイルハンドルから読み取っています。ただし、結果はこのケースと私の実際のユースケースの両方)。
FileStream.ReadToAsync( ) を中断 (キャンセル) したい。
現在の場所で読み取りを停止し、すぐにキャンセルするようにするにはどうすればよいですか?
c# - タスクを継続して連鎖させ、後で並列タスクを実行する
並列タスクのワークフロー
私が直面している問題について助けを得たいと思っています。問題は、ファイルのフォルダーを検索するために並列タスクを実行していることです。各タスクでは、ファイルを識別し、それをファイルの配列に追加する必要があります。次に、すべてのタスクが完了してファイルが集まるのを待ってから、結果の並べ替えを実行します。次に、ファイルごとに 1 つのタスクを実行してファイルを読み取り、一致するパターンを取得することにより、並べ替えられたファイルを個別に処理します。最終段階では、すべての結果を人間が読める形式にまとめて、ユーザー フレンドリーな方法で表示します。
問題は、UI スレッドをブロックしない適切な方法でタスクを連鎖させたいということです。プログラムがどの段階であっても、すべてキャンセルできるようにしたいと思います。
要約すると:
ステージ 1: フォルダーを検索してファイルを見つけます。各タスクは、フォルダー ツリーを再帰的に検索します。
ステージ 2: 見つかったすべてのファイルを並べ替え、重複をクリーンアップする
ステージ 3: ファイルを個別に処理する新しいタスクを開始します。各タスクはファイルを開き、一致するパターンを検索します。
ステージ 4: すべてのファイル検索の結果を 1 つの巨大な結果セットに集約し、人間が読みやすいようにします。
c# - ViewModel で CancellationTokenSource を適切に破棄するにはどうすればよいですか?
通常、ビューモデルで非同期タスクを実行しようとしている場合、コードは次のようになります (簡略化)。
問題はCancellationTokenSource
、IDisposable
. それは単にusing
ブロックに配置するということですか、それとも私有財産に格納されているため、それ以上の何かがあるのでしょうか?