問題タブ [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.
.net - EndInvoke()がIAsyncResultオブジェクトのリストで呼び出されるようにするための2つの質問
したがって、この質問は、.Net IAsyncResultデザインパターンと、この質問EndInvoke
でカバーされている呼び出しの必要性に関するものです。
バックグラウンド
特定の関数への潜在的に多くの非同期呼び出しを開始し、これらすべての呼び出しが終了するのを待ってEndInvoke()
から、すべての結果を取得するために使用するコードがあります。
質問1
呼び出すまで、いずれかの呼び出しで例外が発生したかどうかはわかりません。いずれかの呼び出しEndInvoke()
で例外が発生した場合、メソッド全体が失敗し、例外がAPI固有の例外にラップされて、上位にスローされます。
だから私の最初の質問は、残りの非同期呼び出しが適切に終了することを保証するための最良の方法は何ですか?
終了していない残りの呼び出しを呼び出す(そしてそれ以上の例外を無視する)finally
ブロックは、これを行うための最良の方法ですか?EndInvoke()
質問2
次に、最初にすべてのasyc呼び出しを開始するときに、インスタンスから取得したインスタンスWaitHandle.WaitAll()
の配列を呼び出します。これらすべての非同期呼び出しを起動しているメソッドには、順守するタイムアウトがあるため、これをメソッドに提供します。次に、すべての呼び出しが完了したかどうかをテストします。完了していない場合は、タイムアウトに達している必要があります。これにより、メソッドも失敗し、別のAPI固有の例外がスローされます。WaitHandle
IAsyncResult
WaitAll()
だから私の2番目の質問はこの場合私は何をすべきかということです。
エラーをスローする前に、これらすべての非同期呼び出しを終了するために呼び出す必要がありEndInvoke()
ますが、同時に、EndInvoke()
がブロックされているため、コードがスタックしないようにします。理論的には、少なくともWaitAll()
呼び出しがタイムアウトした場合、すべての非同期呼び出しはタイムアウトによって制御されているため、すべての非同期呼び出し自体がタイムアウトになり、例外がスローされます(したがって呼び出しが完了します)が、このタイムアウトはメインのタイムアウトとは異なる可能性があります
.net - デリゲートの 1 つのインスタンスを使用して、複数の非同期要求を開始できますか?
BeginInvoke
MSDN のドキュメントではこれについてまったく説明も言及もされていないため、複数の非同期呼び出しを行いたい場合に、誰かがデリゲートのインスタンスでの使用を明確にできるかどうか疑問に思いました。
私がやりたいことは、次のようなものです。
問題は、デリゲートの 1 つのインスタンスでこれを行うことができるか、または個々の呼び出しごとにデリゲートのインスタンスが必要かということです。
EndInvoke()
パラメータとして をとることを考えるIAsyncResult
と、前者が正しいと思いますが、ドキュメントにはどちらの方法も示していません。
c# - BeginInvoke呼び出し中に、@ objectパラメーターは何を参照しますか?
BeginInvokeスレッドプールメソッドの使用例:
BeginInvokeで期待されるパラメーターの1つ(最後のパラメーター)は次のとおりです。
@は何を意味しますか?
ありがとう、
スコット
c# - GPS でこのスレッドの問題を解決するのを手伝ってください
私は明らかに緯度と経度を取得するために使用する GPS クラスを持っています。
GPS の状態または位置が変更されると、UpdateData() が呼び出されます。したがって、緯度と経度の両方が有効であることを確認してから、DataReady bool を true に等しくします。
したがって、このコードをかなり n00b の方法で使用します。タイマー (Windows フォームのもの) を使用し、10 秒ごとに getGPSCoordinates() をチェックして、有効な場所が見つかったかどうかを確認し (getGPSCoordinates() が null ではない)、そうでない場合は、残りのコード。これは、クリアな gps 信号を取得するのに 10 秒から 1 分程度かかる場合があるため、使用されます。
したがって、これは正常に機能しますが、これが正しい方法ではないことはわかっています。GPS ビジネス全体を別のスレッドで実行し、位置が変更されてデータの準備が整ったことをメイン スレッドに通知する必要があると思います。
この種のビジネスを処理する正しい方法を教えてもらえますか? IAsyncResult
メインスレッドに通知するために 使用する必要がありますか?
c# - AsyncCallbackは非静的デリゲートを使用できますか?
現在のプロジェクトのipcを処理するために非同期関数呼び出しを使用して、.netリモーティングを使用しています。
クライアントに次のことをしてもらいたいという問題が発生しています。
- 非同期で情報を要求する
- GUIのロードを続行します
- 非同期呼び出しが完了したら、それをGUIにロードします
私は次のコードでこれを行います
上記の例では、RecievedSomethingはこの例の静的メソッドである必要があります。何故ですか?この関数を非静的にすることができれば、GUIをロードできます。
私の解決策は、GUIがサブスクライブしている静的イベントをRecievedSomethingで起動させることです。これは、1つの非同期関数呼び出しを処理するために2つのデリゲートと1つのイベントが必要になるという点で面倒です。
AsyncCallbackを非静的関数で動作させる方法はありますか?
ありがとう!
c# - .net Remoting: サーバーが実行されていないかどうかを検出する
IPC に .net リモート処理を使用するアプリに取り組んでいます。
クライアント アプリが起動すると、次のコードを使用してサーバーに接続します。
そして、関数呼び出しを行うときは、次のコードを使用します。
このコードはそのままでうまく機能します。ただし、起動時にサーバーが実行されているかどうかをクライアントに検出させ、適切なエラー メッセージを表示させたいと考えています。
サーバーが実行されていない場合、クライアントは Web 例外をスローする前に約 3 秒間待機します (下部に表示)。エラー「場所」がないため、try\catch ブロックをどこに置くかわかりません。
サーバーが実行されていないことを検出する最良の方法は何ですか?
ありがとう!
c# - 失敗した送信に関する WCF サービス aync パターン フィードバック
私は Silverlight 4 で作業しており、クライアントの更新に使用される非同期パターンを使用して Polling Duplex サービスを実装しています。
送信先の接続済みクライアントを追跡するために定義した RequestState オブジェクトを使用して、クライアントにコールバックします。
コールバックで返される IAsyncResult パラメータを使用してエラーをチェックする方法がわかりません。
私の質問は、メッセージの送信に失敗したかどうかをどのように確認できますか?
c# - IAsyncResult.AsyncStateを実装するvb.net
これは C# で簡単に実行できますが、VB.Net で同等のものが必要です。VB.Net でさまざまな IAsyncResult プロパティを実装できる必要があります。
C#で
チャンピオンのように機能します...
VB.NET - これは失敗します
VB.Net でプロパティをオーバーロードできないため、これは失敗します。
VB.NET - これらは両方とも失敗します
これは、「IAsyncResult を実装する必要がある」という要件を満たしていません。
c# - 2 回目の BeginInvoke 呼び出しの要求は既に完了しています。なんで?
BeginInvoke で繰り返しメソッドを呼び出しています。各呼び出しの後、EndInvoke を呼び出します。
問題は、2 番目の呼び出しで、返された IAsyncResult の IsCompleted メンバーが、BeginInvoke 呼び出しの直後に true に設定されることです。
これにより、プログラムは 2 番目の呼び出しが完了したと見なすため、誤動作が発生します。
なぜこれを行うのですか?2番目の呼び出しが本当に完了したことをどのように検出できますか?
asp.net - updatepanel 内の DataRepeater を IAsyncResult で更新しても機能しません!
ISyncResult を使用すると、データをデータ リピーターにバインドできません。これが私がやっていることです。更新パネル内にボタンがあり、ユーザーからの入力を取得し、データセットを返す関数を呼び出します。この関数は、更新パネル内にあるデータ リピーターにバインドします。私がしたことは、この関数にデリゲートを作成したことです。今、この関数を次のように呼び出しています
そして、次のように IASyncResult を作成します。
これは Callback メソッドです。
データ リピーターがデータを表示しない理由を理解するのに苦労しています。これをデバッグしているときに、データセットがデータを取得して「ds」を渡していることがわかりますが、デバッグ中にデータリピーター内のコントロールにデータが渡されているにもかかわらず、ページに何も表示されません。