タグ付けされた質問 「asynchronous」

非同期プログラミングは、通常、ソフトウェアのパフォーマンス、応答性、および/または構成可能性を向上させるために、待ち時間が長いか優先度の低い操作を延期するための戦略です。このような戦略は、通常、イベント駆動型プログラミングとコールバックを組み合わせて使用​​し、オプションでコルーチンやスレッドを介して同時実行性を利用します。


4
T-SQLのスリープコマンド?
一定期間スリープさせるだけのT-SQLコマンドを作成する方法はありますか?私は非同期でWebサービスを作成しており、非同期パターンが実際にそれをよりスケーラブルにするかどうかを確認するためにいくつかのテストを実行できるようにしたいと考えています。遅い外部サービスを「モック」するために、実行速度が遅いが実際には大量のものを処理していないスクリプトでSQLサーバーを呼び出すことができるようにしたいと思います。


2
Task.Runを正しく使用し、async-awaitを使用する場合
使用する際の正しいアーキテクチャーについて、ご意見をお聞かせくださいTask.Run。WPF .NET 4.5アプリケーション(Caliburn Microフレームワークを使用)でUIが遅くなっています。 基本的に私はやっています(非常に単純化されたコードスニペット): public class PageViewModel : IHandle<SomeMessage> { ... public async void Handle(SomeMessage message) { ShowLoadingAnimation(); // Makes UI very laggy, but still not dead await this.contentLoader.LoadContentAsync(); HideLoadingAnimation(); } } public class ContentLoader { public async Task LoadContentAsync() { await DoCpuBoundWorkAsync(); await DoIoBoundWorkAsync(); await DoCpuBoundWorkAsync(); // I …

6
await / asyncを使用すると、HttpClient.GetAsync(…)が返されない
編集: この質問は同じ問題のようですが、回答がありません... 編集:テストケース5では、タスクが停止したように見えますWaitingForActivation。 .NET 4.5でSystem.Net.Http.HttpClientを使用していくつかの奇妙な動作に遭遇しました-(たとえば)への呼び出しの結果を「待機」することhttpClient.GetAsync(...)は決して戻りません。 これは、新しいasync / await言語機能とTasks APIを使用する特定の状況でのみ発生します。継続のみを使用する場合、コードは常に機能するようです。 これが問題を再現するコードです。これをVisual Studio 11の新しい「MVC 4 WebApiプロジェクト」にドロップして、次のGETエンドポイントを公開します。 /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 <--- never completes /api/test6 ここの各エンドポイントは、/api/test5決して完了しないことを除いて、同じデータ(stackoverflow.comからの応答ヘッダー)を返します。 HttpClientクラスでバグが発生したか、または何らかの方法でAPIを誤用していますか? 再現するコード: public class BaseApiController : ApiController { /// <summary> /// Retrieves data using continuations /// </summary> protected Task<string> Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); …

4
Parallel.ForEachを制限するにはどうすればよいですか?
Parallel.ForEach()非同期ループを使用して、いくつかのWebページをダウンロードしています。私の帯域幅は制限されているため、一度にダウンロードできるのはxページのみですが、Parallel.ForEachは目的のWebページのリスト全体を実行します。 Parallel.ForEachの実行中にスレッド数またはその他のリミッターを制限する方法はありますか? デモコード: Parallel.ForEach(listOfWebpages, webpage => { Download(webpage); }); 実際のタスクはWebページとは何の関係もないので、独創的なWebクロールソリューションは役に立ちません。

6
非同期voidメソッドによってスローされた例外をキャッチする
Microsoft for .NETの非同期CTPを使用して、呼び出しメソッドで非同期メソッドによってスローされた例外をキャッチすることは可能ですか? public async void Foo() { var x = await DoSomethingAsync(); /* Handle the result, but sometimes an exception might be thrown. For example, DoSomethingAsync gets data from the network and the data is invalid... a ProtocolException might be thrown. */ } public void DoFoo() { try { …

7
非同期/待機構文で拒否する方法は?
非同期/待機関数によって返されたプロミスをどのように拒否できますか? 例:もともと foo(id: string): Promise<A> { return new Promise((resolve, reject) => { someAsyncPromise().then((value)=>resolve(200)).catch((err)=>reject(400)) }); } async / awaitに翻訳する async foo(id: string): Promise<A> { try{ await someAsyncPromise(); return 200; } catch(error) {//here goes if someAsyncPromise() rejected} return 400; //this will result in a resolved promise. }); } では、この場合、この約束を適切に拒否するにはどうすればよいですか?

8
複数の非同期タスクを実行し、それらがすべて完了するのを待つ
コンソールアプリケーションで複数の非同期タスクを実行し、それらがすべて完了するのを待ってから、さらに処理する必要があります。 世の中にはたくさんの記事がありますが、読むほど混乱するようです。タスクライブラリの基本原則を読み、理解しましたが、どこかにリンクがありません。 タスクをチェーンして別のタスクが完了した後に開始することは可能であることを理解しています(これは、私が読んだすべての記事のシナリオとほぼ同じです)、すべてのタスクを同時に実行したいので、一度知りたいそれらはすべて完了しました。 このようなシナリオの最も簡単な実装は何ですか?

14
すべての非同期forEachコールバックが完了した後のコールバック
タイトルが示唆するように。どうすればよいですか? whenAllDone()forEachループが各要素を通過し、いくつかの非同期処理を実行した後に呼び出します。 [1, 2, 3].forEach( function(item, index, array, done) { asyncFunction(item, function itemDone() { console.log(item + " done"); done(); }); }, function allDone() { console.log("All done"); whenAllDone(); } ); このように機能させることは可能ですか?forEachの2番目の引数が、すべての反復を通過したときに実行されるコールバック関数である場合、 予想される出力: 3 done 1 done 2 done All done!

11
async-awaitが追加のスレッドを作成しない場合、どのようにしてアプリケーションを応答可能にしますか?
何度も繰り返しますが、async- を使用awaitしても追加のスレッドは作成されません。コンピュータが一度に複数のことを実行しているように見える唯一の方法は、 実際に一度に複数のことを実行している(並列実行、複数のプロセッサの使用) タスクのスケジューリングとそれらの間の切り替えによるシミュレーション(Aを少し、Bを少し、Aを少しなど) それで、もしasync- awaitそれらのどちらもしないなら、それはどのようにしてアプリケーションを応答可能にすることができますか?スレッドが1つしかない場合、メソッドを呼び出すと、メソッドが完了するのを待ってから、他の処理を行うことになります。そのメソッド内のメソッドは、処理を進める前に結果を待つ必要があります。

2
非同期プログラミングとマルチスレッドの違いは何ですか?
私はそれらは基本的に同じものだと思っていました—プロセッサー間でタスクを分割するプログラムを書く(2つ以上のプロセッサーを持つマシン上で)。それから私はこれを読んでいます、それは言う: 非同期メソッドは、非ブロッキング操作を目的としています。非同期メソッドのawait式は、待機中のタスクの実行中に現在のスレッドをブロックしません。代わりに、式は継続としてメソッドの残りの部分にサインアップし、asyncメソッドの呼び出し元に制御を返します。 asyncおよびawaitキーワードを使用しても、追加のスレッドが作成されることはありません。非同期メソッドは独自のスレッドで実行されないため、非同期メソッドはマルチスレッドを必要としません。メソッドは現在の同期コンテキストで実行され、メソッドがアクティブな場合にのみスレッドで時間を使用します。Task.Runを使用してCPUにバインドされた作業をバックグラウンドスレッドに移動できますが、バックグラウンドスレッドは、結果が利用可能になるのを待っているだけのプロセスには役立ちません。 そして、誰かがそれを英語に翻訳できるかどうか疑問に思っています。これは、非同期性(つまり、単語ですか?)とスレッド化を区別しているようで、非同期タスクはあるがマルチスレッド化はできないプログラムを作成できることを示しています。 これで、pgの例のような非同期タスクの考え方がわかりました。ジョンスキートのC#の詳細、第3版の467 async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task<string> task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } } asyncキーワードの手段が、「この機能は、それが呼ばれるたびに、そのコールが呼ばれるようにした後、その完了がすべてのために必要とされるコンテキストで呼び出されることはありません。」 つまり、あるタスクの途中でそれを書く int x = 5; DisplayWebsiteLength(); double …

3
dispatch_asyncについて
このコードについて質問があります dispatch_async(dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL]; [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES]; }); このコードの最初のパラメーターは dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) このコードに、特定の優先度レベルのグローバル同時キューを返すことが定義されているグローバルキューでシリアルタスクを実行するように要求していますか? dispatch_get_global_queueメインキューよりも使用する利点は何ですか? 私は混乱しています。これをよりよく理解するために私を助けていただけませんか。

12
非同期メソッドを同期的に呼び出す
私にはasync方法があります: public async Task<string> GenerateCodeAsync() { string code = await GenerateCodeService.GenerateCodeAsync(); return code; } このメソッドを同期メソッドから呼び出す必要があります。 GenerateCodeAsyncこれを同期的に機能させるために、メソッドを複製せずにこれを行うにはどうすればよいですか? 更新 しかし、合理的な解決策は見つかりませんでした。 しかし、私はHttpClientすでにこのパターンを実装していることがわかります using (HttpClient client = new HttpClient()) { // async HttpResponseMessage responseAsync = await client.GetAsync(url); // sync HttpResponseMessage responseSync = client.GetAsync(url).Result; }

14
Pythonのツイストのクリーンで軽量な代替手段ですか?[閉まっている]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 5年前休業。 この質問を改善する ずっと前に、同時要求を同時に発生させるためにマルチスレッド化したWebスパイダーを作成しました。それは私のPythonの青年期で、GILとそれがマルチスレッドコードに対して作成する関連の問題を知る前の数日間でした(つまり、ほとんどの場合、シリアル化されたものです!)... このコードを作り直して、コードをより堅牢にし、パフォーマンスを向上させたいと思います。これを行うには、基本的に2つの方法があります。2.6以降の新しいマルチプロセッシングモジュールを使用する方法と、何らかのリアクター/イベントベースのモデルを使用する方法です。後者のほうがはるかに簡単で、エラーが発生しにくいので、後者を使用したいと思います。 質問は、どのフレームワークが私のニーズに最も適しているかに関するものです。以下は、私がこれまでに知っているオプションのリストです。 Twisted:Python reactorフレームワークのおじいさん:複雑で少し膨らんでいるように見えます。小さなタスクのための急な学習曲線。 Eventlet:で、みんなからリンデン・ラボ。これらの種類のタスクを対象としたGreenletベースのフレームワーク。私はコードを見てみましたが、あまりきれいではありません。pep8に準拠せず、印刷物が散在しています(なぜフレームワークでこれを行うのですか?)、APIは少し矛盾しています。 PyEv:未熟です。libeventに基づいているため、現時点ではだれも使用しているようには見えないため、確実なバックエンドがあります。 asyncore:stdlibから:非常に低レベルで、何かを実現するためだけに多くのレッグワークが必要なようです。 tornado:これは動的Webサイトをサーバーするように設計されたサーバー指向の製品ですが、非同期HTTPクライアントと単純なioloopを備えています。それは仕事を成し遂げることができるように見えますが、それが意図したものではありません。[編集:残念ながらWindowsでは動作しません。これは、私にとってそれを数えます-私がこの不完全なプラットフォームをサポートするための要件です] 見逃したことはありますか?確かに、簡素化された非同期ネットワーキングライブラリのスイートスポットに合うライブラリがそこにあるはずです! [編集:このページへのポインタを提供してくれたintgrに感謝します。一番下までスクロールすると、このタスクに何らかの形で取り組むことを目的としたプロジェクトの非常に優れたリストが表示されます。実際、Twistedの誕生以来、物事は実際に進んでいるようです。人々は、従来のリアクタ/コールバック指向のソリューションではなく、コルーチンベースのソリューションを好むようです。このアプローチの利点は、より明確で直接的なコードです。特に、boost.asioを使用している場合は、確かに過去に見つかりました。C ++では、コールバックベースのコードは、追跡が困難で、訓練されていない目からは比較的わかりにくい設計につながる可能性があります。コルーチンを使用すると、少なくとも少し同期が取れているように見えるコードを書くことができます。私の今の仕事は、これらの多くのライブラリのどれが私が見た目で気に入っているかを調べて試してみることです!私が今尋ねたのはうれしい...] [編集:おそらく、この質問をフォローしたりつまずいたり、このトピックについて何らかの意味で気にかけている人にとって興味深いものです。この仕事に利用できるツールの現在の状態について、非常にすばらしい記事を見つけました]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.