問題タブ [iasyncresult]
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# - IAsyncResult の WaitHandle とブロッキング?
私がこのコードを持っているとしましょう:
さて、 ifは IO 操作なので、スレッドを結び付けていないMyAsynchOperation
内部メソッド (APM) がある可能性があります。BeginFOO/EndFOO
操作が終了すると、スレッド プールからの新しい/同じスレッドが (完了ポートを介して) 応答を処理します。
大丈夫。
しかし、私が不思議に思うことの 1 つは、次のIAsyncResult
プロパティがあることです。
System.Threading.WaitHandle AsyncWaitHandle { get; }
現在のスレッドをブロックWaitHadnle
するメソッドがあることはよく知っています。
スレッドは、回転式改札口で(たとえば)を呼び出して待機またはブロックします。WaitOne
そして、ここに私の質問があります:
質問1
- IO に APM を使用していると仮定すると、スレッドのブロック/タイイングがない場合、
MyAsynchOperation
どのように(何のために) 使用されていますか?waitHAndle
質問2
- APMを使用してい
MyAsynchOperation
ないと仮定すると、new Thread().start(do some calculation)
後で呼び出す内部的に呼び出すのは私の実装だけですAsyncCallback's
Callback
----waithandle
ここでスレッドをブロックしますか?
c# - Service Bus IAsyncResult
現在、アプリがサービス バスから非同期メッセージを受信できるようにしようとしています。しかし、例外がスローされることがありますが、それを消す方法や、それが何から発生するのかわかりません。
例外は次のとおりです。
だから、それが私の IASync メソッドに由来することは知っていますが、それがどこで正しく機能しないのか理解できません。
私の QueueClient conf:
ここで私の両方の IASync メソッド:
基本的に、これらのメソッドは、ServiceBus で新しいメッセージを検出するたびにトリガーされます。問題は、 Console.WriteLine("New Message"); を入れたことです。新しいメッセージが検出されたとき、ただし、この CW は 2 回 (またはそれ以上) トリガーされます。
だから2つのことのうちの1つ:私のエラーの原因は何ですか?そして、IAsync メソッドをこのメッセージで一度だけトリガーする方法を教えてください。
c# - APM と、ブレークポイントに関する未解決の System.AccessViolationException の謎
次の関数を検討してください。
質問 1: BeginRead 行にブレークポイントを設定し、プログラムをデバッグ モードで実行すると、次のエラーが発生します。
MyApp.exe で、タイプ 'System.AccessViolationException' の未処理の例外が発生しました。
ただし、ブレークポイントを ReadLine 行に配置して同じことを行うと、エラーは発生しません。FileStream インスタンスを最後のパラメーターとして BeginRead 関数に渡すと問題が発生すると思いますが、そこで何が起こっているのかわかりません。
---UPDATE1:コールバックに「fs」を渡そうとする理由を尋ねるかもしれません。はい、メンバー変数として保持できますが、複数のファイルを非同期で読み取る場合はどうなりますか? そうすれば、ファイル ストリームの配列 (またはリスト) を保持することは不合理になります。
質問 2: 私の知る限り、IAsyncResult は次のように定義されています。
ただし、コードをトレースすると、IAsyncResult に他のメンバーがいることに気付きました。
これはどのように可能ですか?IAsyncResult は明らかに ReadWriteTask クラス (この場合) によって実装されていますが、他のプロパティがどこから来たのかわかりません。
---更新 2: 次のコードを使用して同じことを模倣しようとしました:
メソッドを呼び出すには、次のように MyClass をインスタンス化し、GetMyInterface メソッドを呼び出します。
ただし、Quickwatch で my 変数を見ると、フラット化されていない結果が表示されますが、これはまったく問題ありません。ただし、これは IAsyncResult / ReadWriteTask の場合とは異なります。違いは何ですか?
powershell - 非同期手順の問題
PowerShell を使用して SQL コマンドを非同期で実行しようとしています。これを達成するために、SqlCommand
クラスとBeginExecuteNonQuery
メソッドを使用しています。私の知る限り、このメソッドはIAsyncResult
クラスを返す必要があります。しかし、戻り値を検査しようとすると、System.Data.Common.DbAsyncResult
クラスが表示されます。
私が間違っていること、または私の間違いについてどこで読むことができるか教えてください。私はプログラミングにまったく慣れていません。私のコードサンプルは以下です
このスクリプトの結果は
c# - DataGrid (DataGridRowDetailsEventArgs e) AsyncResult の送信
良い一日。DataGrid (sumOperationGrid) を含む DataGrid (operationGrid) RowDetailsTemplate を持っている
要求は WCF サービスに対するものであり、答えはすべて適切であることがわかりました。デリゲートを介してデータを送信すると、答えはデータグリッド (sumOperationGrid) にあり、表示されます。
そうしてみました。
など
どちらの場合も、「このオブジェクトの所有者が別のスレッドであるため、呼び出し元のスレッドはこのオブジェクトにアクセスできません」というエラーに要約されます。
client.BeginGetCurrencySumByCurrentitem からデリゲートを削除し、別の関数でデータ テーブル s2 を転送する方法の問題はありますか? フローに戻り、データをテーブル sumOperationGrid にロードするにはどうすればよいですか?
c# - ストアド プロシージャは実行されませんが、IAsyncResult.IsCompleted は「true」です
私は、エンドユーザーがストアド プロシージャを実行するための単純なプログラムと思われるものを持っていますが、実行にはかなりの時間がかかる可能性があります。非同期接続を使用し、Begin/EndExecuteNonQuery を呼び出し、タイマーがまだ実行中であることをユーザーに知らせることができると考えました。ここまでは順調ですね。
特定のパラメーターが true の場合、呼び出されるストアド プロシージャは、最後に別のストアド プロシージャを実行します。この 2 番目の呼び出しが発生すると、IsCompleted はそうでなくても「true」になり、プログラムは 2 番目の SP が終了するまで EndExecuteNonQuery でブロックされるようです。確かなことはわかりませんが、これは、即時の SQL プロセスが完了するためだと思います (これ以上何もする必要がないため、EXEC 呼び出しは最後の行です) が、サブプロセスが呼び出しを続行します。
SP が完全に完了したかどうかを確認するにはどうすればよいですか? IAsyncResult.IsCompletedを完全には理解していないことに気づきました。私の印象はtrue
、通話が完全に終了したときになるということですが、そのリンクからの次のステートメントは、別のことを考えさせます。
このプロパティが true の場合、非同期操作で使用するために割り当てたリソースを破棄しても安全であると見なすことができます。
そのため、完全な SP が実際には完了していなくても、リソースを安全に破棄できるという点で、意図したとおりに機能している可能性があります。その場合、いつ完全に完了したかを知るための代替手段はありますか? ExecuteNonQuery
別のスレッド ( ?) で法線を使用することだけを検討しましたが、最初に/BackgroundWorker
で何かを見逃していないことを確認したいと思います。BeginXxx
EndXxx
また、SqlCommand を破棄して、プログラムが SP を待たずに終了できるようにする方法にもオープンです。エンド ユーザーにとって本当に重要なのは最初の SP だけだからです。
.Net 4、MSSQL 2008 R2 を使用。
関連コード:
.net - APM オペレーションを別の APM オペレーションにラップする
非同期 I/O を行ういくつかの APM メソッドを含むライブラリを実装しています。(邪魔にならないように、Tasks、async/await、Rx、サードパーティ ライブラリなどは使用できません。)
たとえば、私の APM ライブラリ メソッドの 1 つ が、非同期 I/O を実行するために、BeginOuter()
別の APM メソッド に延期されているだけだとします。ユーザーの入力で行っている他のすべてが同期している場合、内側のfromを外側のfromとしてBeginInner()
再利用できない理由はありますか? そのような:IAsyncResult
BeginInner()
IAsyncResult
BeginOuter()
明らかに、BeginOuter()
複数の非同期呼び出しを連鎖させて作業を行う場合、呼び出し元に最初に待機するものだけを返すのは間違いです。しかし、非同期呼び出しが 1 つしかない場合はどうなるでしょうか。
また、私の場合、呼び出し元がBeginInner()
完了後に混乱する可能性があるとは考えられませんが、呼び出す前に、有用なことを行うEndOuter()
ために結果に依存することになります。EndOuter()
そこにあるこれに関するすべての情報を統合するのに苦労しています。IAsyncResult パターンの実装をいくつか見てきましたが、この特定のユース ケースについては、次の点を除いてあまり見つけることができません。 .aspx機微をもう少しよく理解したいと思います。
編集:私はこの質問を見ましたが、私がチェックしたときの回答はすべて「[ライブラリ]を使用する」、「別の方法で行う」、または「IAsyncResultを実装する」でした(ただし、理由には触れません)。これが許容されることなのか、それとも IAsyncResult を実装することが町で唯一のゲームなのかを理解しようとしています。
c# - 完了するまで IAsyncResult 関数を待ちます
IAsycnResult メソッドが完了するまで待機するメカニズムを作成する必要があります。どうすればこれを達成できますか?
asynchronous - IAsyncResult の使用方法
クラスに属する次のシグネチャを持つメソッドがあります。
コールバックを正確に呼び出す方法を理解しようとしています。コールバック メソッドを指定するイベントがどこにも見つかりません。