問題タブ [async-await]
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# - Async / Await-それは*同時*ですか?
私はC#5の新しい非同期のものを検討してきましたが、1つの特定の質問が出てきました。
キーワードは、継続渡しawait
を実装するための優れたコンパイラトリック/シンタックスシュガーであることを理解しています。メソッドの残りの部分はオブジェクトに分割され、順番に実行されるようにキューに入れられますが、制御は呼び出し元のメソッドに返されます。Task
私の問題は、現在これがすべて単一のスレッド上にあると聞いたことです。これは、この非同期のものが実際には継続コードをオブジェクトに変換し、各タスクが完了した後、次のタスクを開始する前にTask
呼び出す方法にすぎないことを意味しますか?Application.DoEvents()
それとも私は何かが足りないのですか?(質問のこの部分は修辞的です-私は何かが欠けていることを完全に知っています:))
c# - async / await、TaskEx.WhenAllおよび例外
これは単なる架空の問題であり、このソリューションが同様のシナリオのすべての範囲で役立つことを願っています。Webページ上のすべての外部リソース(画像、スクリプトなど)の合計サイズをカウントする必要があるとします。ページをダウンロードし、すべてのSRC情報を抽出して、URLリストをダウンロードタスクに変換します。
これで、何らかの理由でリンクの1つに到達できない場合、TaskEx.WhenAll全体がWebExceptionで中止されます。私が必要としているのは、個々のタスク内のWebExceptionを無視し、その場合は長さ0を想定することです。何か案は?
javascript - Webブラウザまたはnode.jsで非同期/待機しますか?
C# 5.0 から JavaScript にコンパイルできる言語 (CoffeScript など)にasync/await機能を導入する試みはありますか? (したがって、Web ブラウザーまたは node.js のいずれかで使用できます。)
c# - C# 5 の新しい async/await 機能は、メッセージ ループとどのように統合されますか?
C# の新しい async/await 機能の CTP を確認する機会はありませんでしたが、次のような疑問がありました。
メッセージループとどのように統合しますか? 標準の Windows アプリケーション (Winforms、WPF) では、Dispatcherなどを使用して、アプリケーションのメッセージ ループにメッセージを送信することによって継続が呼び出されると思いますか?
標準の Windows メッセージ ループを使用していない場合はどうなりますか? たとえば、GTK# アプリケーションまたはコンソール アプリケーション (実際にこの機能がコンソール アプリケーションでまったく使用できる場合)。
これに関する情報をインターネットで検索しましたが、役に立ちませんでした。誰でも説明できますか?
c# - PostSubmitterの非同期CTP
非同期CTPを使用してRESTクライアントを構築しようとしています。私はCTPを初めて使用するため、インターネット上でいくつかの例を調べた後、投稿(GETまたはPOST)用に構築されたクラスを入手しました。これまでのクラスは次のとおりです。
そして、これは私がそれを使用している方法です:
動作は期待どおりではありません。行TextResponse.Text += Task.Factory.StartNew(() => PostSomeData().Wait());
whiz-byと私は例外を取得せず、結果の文字列は次のとおりです。
開始しています...System.Threading.Tasks.Task関数が完了しました!機能が終了しました!
ここで、POSTを使用している場合、上記の後に例外が発生します。例外を掘り下げると、500内部サーバーエラーが明らかになります
ただし、GETを使用している場合は、何も起こりません。例外はなく、同じ最終結果です。
PostSubmitterクラスで何か問題がありますか?
よろしく。
アップデート# 1UIのクリックイベントも変更しました。でも
- PostTypeがGETの場合にのみ機能します。POSTが機能していません。
- 操作が続く間、UIがハングする
変更:
winforms - Cancelltion サポート (CancellationTokenSource) と進捗レポートを備えた PostSubmitter の非同期 CTP
仲間の開発者!
POST または GET を使用して Web サイトに投稿するためのクラスがあり、応答を読み取ります。現在はすべて非同期であり、UI がハングすることはありません。
今すぐキャンセルを処理できるようにアップグレードする必要があります。使用されているすべての非同期メソッドは、キャンセル トークンを受け入れていません。その理由と代替手段を理解する必要があります。可能であれば、クラス内で CancellationTokenSource オブジェクトを作成するか、UI からパラメーター化する必要がありますか?
次に、PostData() メソッドの進行状況を公開する必要があります。どうすればいいですか?
クラス:
注: ファイルのアップロードには、最終的に 3 つの方法があります。その前に、キャンセルと進行状況のレポートを理解する必要があります。
関連する質問PostSubmitter の非同期 CTP
どんな助けでも大歓迎です。
c# - マルチスレッドを使用してこのコードを改善できますか?
1 日に 1 回だけ実行される単純な Windows サービスがあります。データベースでいくつかのクエリを実行し、適切な html コンテンツ (テーブル、div など) を生成し、電子メールの本文で複数の受信者に送信します。
電子メールの本文は次のように作成されます。
すべてのGenerateHTMLContent
メソッドはほとんど同じです。データベースでクエリを実行し、HTMLTextWriter を使用して HTML テーブルを作成し、テーブルを文字列として返します。
このコードは、マルチスレッドまたは async-await パターンを使用して改善できますか? 問題のコードは、StringBuilder オブジェクトに行を追加する場所です。
編集:これまでマルチスレッドを使用したことがないため、質問をしました。それが可能かどうかを知りたかっただけです。その上、プログラムは今では十分に速く実行されます。
c# - awaitable タスクベースのキュー
コレクションからの取得がブロックされず、代わりに非同期であり、アイテムがキューに配置されるまで async await が発生するBlockingCollectionに似た、 ConcurrentQueueの実装/ラッパーが存在するかどうか疑問に思っています。
独自の実装を考え出しましたが、期待どおりに機能していないようです。すでに存在するものを再発明しているのかどうか疑問に思っています。
これが私の実装です:
c# - 待機可能な非同期関数への最初の呼び出しは、不明な理由で同期しています
現在、WPF4.5とVisualStudio 11DeveloperPreviewで遊んでいます。私はasync-awaitのものを使用して、アプリケーションイベントハンドラーで非同期にhttprequetsを実行しています。問題は、待機可能なメソッドを最初に呼び出すと、終了するまでアプリケーションスレッドがハングすることです。後続のすべての呼び出しは問題ありません。つまり、実行中、アプリケーションは引き続き使用できます。
これが私のコードです(意味のある抜粋のみ):
XAML
C#コードビハインド:
前のコードからの待機可能な呼び出し元:
行の直後にデバッグしてブレークポイントを設定しているとき...httpClient.PostAsync...を待つと、要求が処理されている間(約2秒)にアプリケーションがハングしているのは、実際にはこの呼び出しであることがわかります。しかし、待機可能な呼び出しのある行にブレークポイントを配置すると、オートコンプリートテキストボックスの入力が開始された直後に発生します。少なくとも私のコードでは、間に何もありません。そのため、httpClientへの待機可能な呼び出しによってアプリがハングすると想定しています。
このような奇妙な振る舞いを引き起こすこのコードの問題を指摘できますか?
c# - 非同期/awaitが期待どおりに反応しない
以下のコードを使用すると、コンソールの「Ready」の前に「Finished」という文字列が表示されると思います。誰かが私に説明できますか、なぜawaitはこのサンプルのタスクの終了を待たないのですか?