問題タブ [asynchronous]

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.

0 投票する
5 に答える
1978 参照

c# - ガベージ コレクターは、.NET での非同期呼び出し中に参照されていないオブジェクトを一時的に破棄しますか?

.NET で非同期呼び出し、つまり HttpWebRequest.BeginGetResponse を行うと想像してください。HttpWebRequest オブジェクトはより広い範囲で参照されません。ガベージ コレクターはそれを破壊し、問題を引き起こしますか?

コード例:

代替バージョン (リクエストが AsyncState として渡される):

0 投票する
2 に答える
1039 参照

c++ - Boost.Asio を使用するときに有効なオブジェクトの寿命を確保する最善の方法は何ですか?

最近Boost.Asioでよく遊んでいます。このライブラリは、今日のマルチコア システムからパフォーマンスを引き出す素晴らしい方法を提供してくれるので、とても気に入っています。

Asioで非同期呼び出しを行うときのオブジェクトの寿命/所有権に関して、私は何度か自問しましたが、捨てる価値があると思いました。

私が繰り返し遭遇した問題は、非同期コールバックがまだ保留中のオブジェクトを「期限切れ」にしなければならないことが非常に多いということです。コールバックが呼び出される前にそのオブジェクトが範囲外になると、必然的に事態は悪化します。

これに対抗するためにboost::enable_shared_from_this、ほとんどの asio ベースのクラスの基本クラスとしてテンプレートを使用することにしました。これは問題なく動作しますが、少し面倒です。通常、これは、コンストラクターを保護し、ファクトリ メソッドをクラスに追加して、すべてのインスタンスが shared_ptr 内に作成されるようにすることも意味します。

他の人がこの問題にどのように取り組んだか知りたかっただけです。私はこれを最善の方法で行っていますか?それとも、私の Asio.Foo がすべて間違っているのでしょうか?

議論... :)

0 投票する
2 に答える
2104 参照

asynchronous - 非同期操作を実行するカスタム Windows ワークフロー アクティビティ - 汎用サービスを使用してやり直す

いくつかのプロセスを非同期的に開始し、非同期イベントが到着したときにウェイクアップする必要がある、カスタムの Windows Workflow Foundation アクティビティを作成しています。

私が見つけたすべてのサンプル (たとえば、Kirk Evans によるもの) には、ほとんどの作業を行うカスタム ワークフロー サービスが含まれており、アクティビティによって作成されたキューにイベントがポストされます。その主な理由は、[WF 以外のスレッドから機能する] イベントを投稿する唯一の方法が WorkflowInstance.EnqueueItem であり、アクティビティがワークフロー インスタンスにアクセスできないため、イベントを投稿できないことです。 (非同期操作の結果を受け取る非 WF スレッドから)。

この設計は好きではありません。機能が 2 つに分割され、新しいアクティビティ タイプが追加されたときにホストにサービスを追加する必要があるからです。醜い。

そこで、アクティビティの非同期イベント ハンドラーから呼び出し、さまざまな非同期アクティビティで再利用できる次の汎用サービスを作成しました (エラー処理は省略されています)。

アクティビティ コードでは、このサービスへの参照を取得して保存し、非同期操作を開始し、完了したら、このサービスを使用してイベントをキューに投稿できます。この利点 - すべてのアクティビティ固有のコードをアクティビティ内に保持し、アクティビティの種類ごとに新しいサービスを追加する必要がありません。

しかし、公式およびインターネットのサンプルがそれを行っているのを見ると、再利用不可能なサービスに特化しています。このアプローチが問題ないかどうかを確認したいですか、それともここでいくつかの問題を引き起こしていますか?

0 投票する
6 に答える
1349 参照

c# - C# によるマルチスレッドと同時実行

Windows フォーム ウィンドウでは、複数のイベントが非同期メソッドをトリガーできます。このメソッドは、ファイルをダウンロードしてキャッシュします。私の問題は、そのメソッドを一度実行したいということです。つまり、ファイルが複数回ダウンロードされるのを防ぎたいのです。

ファイルをダウンロードするメソッドが 2 回トリガーされた場合、2 回目の呼び出しでファイルを待機する (または最初のメソッドが実行されるのを待機する) 必要があります。

誰かがそれを達成する方法について考えを持っていますか?

更新:不要なダウンロードを防止しようとしているだけです。私の場合、クライアントが数ミリ秒以上 ListBox 内のアイテムの上にマウスを置くと、ダウンロードが開始されます。ユーザーがクリックしてファイルを要求すると想定しています。ユーザーがアイテムの上にマウスを 1 秒間置いてからクリックすると、発生する可能性があります。この場合、2 つのダウンロードが開始されます。そのようなシナリオを処理するための最良の方法を探しています。

更新 2: : ユーザーがマウスを複数の項目の上に移動する可能性があります。その結果、複数のダウンロードが発生します。私はこのシナリオにそれほど苦労していませんが、現時点では、そのようなシナリオに直面した場合でも、ダウンロードを放棄することはありません. ファイルがダウンロードされ (通常、ファイルは約 50 ~ 100kb です)、キャッシュされます。

0 投票する
1 に答える
1128 参照

wcf - 非同期 WCF 呼び出しでエラー フィードバックを取得する方法はありますか?

同期 (ブロッキング) モードで 100% 動作する WCF サービスがあり、非同期パターンを使用するように呼び出しを作り直す必要があります。

このサービスは認証を使用し、クライアントからサーバーへのチャンク ファイル転送を実行するため、'Begin' 非同期プレフィックスを使用して呼び出しを開始するように作り直しました。

現在、転送しようとするファイルチャンクの各部分で呼び出しがタイムアウトする原因となるユーザー資格情報を故意に壊してエラーをテストしています。これには時間がかかります。問題は、エラー フィードバックが得られず、非同期呼び出しが失敗した場合にエラー フィードバックを取得する方法がわからないことです。これにより、一部の非常に大きなファイルのアップロードがまったく失敗しますが、例外がスローされないため、クライアントはそれを認識しません。

Debug->Exceptions->All CLR exceptions にチェックを入れて、飲み込まれている例外があるかどうかを確認しましたが、まだ何もありません。

要約すると、WCF で非同期呼び出しからエラー フィードバックを取得するにはどうすればよいでしょうか。

前もって感謝します、

ライアン

0 投票する
11 に答える
120946 参照

c - C ノンブロッキング キーボード入力

ユーザーがキーを押すまでループするプログラムをC(Linux上)で作成しようとしていますが、各ループを続行するためにキーを押す必要はありません。

これを行う簡単な方法はありますか?おそらくそれでできると思いますがselect()、それは大変な作業のようです。

または、ノンブロッキング io の代わりにプログラムが終了する前にctrl-キーを押してクリーンアップを行う方法はありますか?c

0 投票する
4 に答える
11838 参照

c# - 非同期操作に.NET2.0シリアルポート.BaseStreamを正しく使用する方法

.NET2.0 SerialPortの.BaseStreamプロパティを使用して、非同期の読み取りと書き込み(BeginWrite / EndWrite、BeginRead / EndRead)を実行しようとしています。

私はこれである程度の成功を収めていますが、しばらくすると、(Process Explorerを使用して)アプリが使用しているハンドルが非常に徐々に増加し、場合によっては余分なスレッドが増加し、ハンドル数も増加することに気付きます。

コンテキストスイッチレートも、新しいスレッドが表示されるたびに増加します。

アプリは常に3バイトをPLCデバイスに送信し、その代わりに800バイト程度を取得し、57600のボーレートで送信します。

初期のCSwitchデルタ(これもProcess Explorerから)は約2500で、とにかく非常に高いようです。新しいスレッドが表示されるたびに、この値が増加し、それに応じてCPU負荷が増加します。

誰かが似たようなことをしてくれて、私を助けてくれることを願っています。あるいは、「神の名において、そのようにしないでください」とさえ言ってくれることを願っています。

以下のコードでは、「this._stream」はSerialPort.BaseStreamから取得され、CommsResponseはIAsyncresult状態オブジェクトとして使用するクラスです。

このコードは、シリアルポートを使用する代わりに作成するTCP接続に共通です(シリアルポートとTCPチャネルが派生したCommsChannel基本クラスがあります)。これらの問題はないので、かなり期待しています。 CommsResponseクラスには何の問題もありません。

ありがたいコメントをいただきました。

0 投票する
3 に答える
2009 参照

apache-flex - Flex で Web サービスの結果をリクエストに一致させる

質問に入る前に、少し (!) 背景を説明します。

グリッドの配列がロードされたアコーディオン コントロールがあり、それぞれが物事の配列で遅延ロードされます。これらのリストを取得するために、自動生成された Web サービス プロキシを使用しています。Web サービスの応答を待たずに、ユーザーがアコーディオンで選択した子を変更できるようにしたいと考えています。私は元々、すべてのリクエストに同じプロキシ インスタンスを使用し、リクエストを作成された順序で追跡していましたが、これの問題は、配列が短いほどサーバーからより迅速に返されるため、リクエストが作成された順序が無関係になることです。 .

プロキシ結果イベントを処理するときに元のリクエストを特定する明白な方法を見つけることができなかったので、最終的には、アコーディオンの変更イベントを処理し、新しい Web サービス プロキシをインスタンス化し、それをハッシュテーブルに押し込む関数になりました。選択した子のインデックスを作成し、クロージャーをイベント ハンドラーとして追加します。つまり、次のようなものです。

(これを少し匿名化しようとしたので、何かを見落としているかもしれませんが、うまくいけばアイデアが得られます)

それで、質問に:プロキシの結果を、私が見逃している元のリクエストと一致させる簡単な方法はありますか?

そうでない場合、私が行ったことは合理的ですか?最終的に生成してからそれらを正しく破棄する可能性のあるプロキシ インスタンスの数について少し心配しています (それが必要になった場合)。

更新: 生成されたプロキシ コードが、mx.rpc.events.ResultEvent ではなく、flash.events.Event から ResultEvents をサブクラス化するため、問題が発生する可能性があると思います。なぜこれを行うのか完全にはわかりません.AsyncTokenにアクセスする唯一の方法は、メソッド呼び出しによって最初に返されたときです.

0 投票する
3 に答える
777 参照

sql - .NET では、SQL からファイルへのデータのストリーミング

SQL から DataTable を取得し、それを XML に変換して (SQL XML は使用できません)、ファイルに保存する必要があります。問題は、ファイルが 5 GB になり、すべてをダウンロードしてメモリ内で一度に XML に変換するのに十分なメモリがないことです。DataReader を使用してデータを変換し、チャンクでファイル ストリームにプッシュできるはずですが、実際にこれを行う方法がわかりません。どうすれば次のことができますか?

  1. SQL サーバーに非同期で接続する
  2. ストアド プロシージャを非同期的に呼び出す
  3. DataReader から非同期的にデータを読み取る
  4. データを DataReader から XML に変換し、ファイルに非同期的に保存する

複数のリクエストを処理するサーバー上にあり、それぞれに対してスレッドをブロックすることはできないため、これはすべて非同期である必要があります。