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

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

6
2つの非同期タスクを並行して実行し、.NET 4.5で結果を収集する
私はしばらくの間、.NET 4.5で簡単に操作できると思ったものを取得しようとしています 2つの実行時間の長いタスクを同時に起動 し、最良のC#4.5(RTM)で結果を収集したい 以下は動作しますが、私はそれが好きではありません: Sleep非同期メソッドになりたいので、await他のメソッドにできます それはちょうど不器用に見えます Task.Run() 新しい言語機能を使用しているとはまったく思いません! 作業コード: public static void Go() { Console.WriteLine("Starting"); var task1 = Task.Run(() => Sleep(5000)); var task2 = Task.Run(() => Sleep(3000)); int totalSlept = task1.Result + task2.Result; Console.WriteLine("Slept for a total of " + totalSlept + " ms"); } private static int Sleep(int …

2
インターフェース実装を非同期にする
現在、いくつかの非同期メソッドを使用してアプリケーションを作成しようとしています。私のすべてのIOは、インターフェイスの明示的な実装を通じて行われ、操作を非同期にする方法について少し混乱しています。 私が見ているように、私は実装に2つのオプションがあります: interface IIO { void DoOperation(); } オプション1: 暗黙の実装を非同期で実行し、暗黙の実装で結果を待ちます。 class IOImplementation : IIO { async void DoOperation() { await Task.Factory.StartNew(() => { //WRITING A FILE OR SOME SUCH THINGAMAGIG }); } #region IIO Members void IIO.DoOperation() { DoOperation(); } #endregion } オプション2: 明示的な実装を非同期で実行し、暗黙的な実装からのタスクを待ちます。 class IOAsyncImplementation : IIO { private …


13
同時非同期I / O操作の量を制限するにはどうすればよいですか?
// let's say there is a list of 1000+ URLs string[] urls = { "http://google.com", "http://yahoo.com", ... }; // now let's send HTTP requests to each of these URLs in parallel urls.AsParallel().ForAll(async (url) => { var client = new HttpClient(); var html = await client.GetStringAsync(url); }); これが問題です。1000以上の同時Webリクエストを開始します。これらの非同期HTTPリクエストの同時量を制限する簡単な方法はありますか?そのため、一度にダウンロードされるWebページは20を超えません。最も効率的な方法でそれを行う方法?

4
.json()がPromiseを返すのはなぜですか?
私はfetch()最近、APIをいじり回していて、少し風変わりなことに気づきました。 let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterator .then(response => { return { data: response.json(), status: response.status } }) .then(post => document.write(post.data)); ; post.dataPromiseオブジェクトを返します。 http://jsbin.com/wofulo/2/edit?js,output ただし、次のように記述されている場合: let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterator .then(response => response.json()) .then(post => document.write(post.title)); ; postObjectこれは、title属性にアクセスできる標準です。 http://jsbin.com/wofulo/edit?js,output だから私の質問は、なぜresponse.jsonオブジェクトリテラルでプロミスを返すのですか?

6
Node.jsの非同期関数を作成する方法
私は非同期関数がどのように書かれるべきかについて研究しようとしました。たくさんのドキュメンテーションを徹底的に調べた後、それは私にはまだ不明です。 Nodeの非同期関数を作成するにはどうすればよいですか?エラーイベント処理を正しく実装するにはどうすればよいですか? 私の質問をする別の方法はこれです:次の関数をどのように解釈すべきですか? var async_function = function(val, callback){ process.nextTick(function(){ callback(val); }); }; また、SOでこの質問を見つけました(「node.jsで非ブロッキング非同期関数を作成するにはどうすればよいですか?」)は興味深いものです。まだ回答されていないようです。

8
JavaScriptで、いくつかの非同期タスクが完了するのを待つ最も簡単な方法は?
mongodbコレクションをいくつか削除したいのですが、それは非同期タスクです。コードは次のようになります。 var mongoose = require('mongoose'); mongoose.connect('mongo://localhost/xxx'); var conn = mongoose.connection; ['aaa','bbb','ccc'].forEach(function(name){ conn.collection(name).drop(function(err) { console.log('dropped'); }); }); console.log('all dropped'); コンソールに次のように表示されます。 all dropped dropped dropped dropped all droppedすべてのコレクションが削除された後に印刷されることを確認する最も簡単な方法は何ですか?サードパーティを使用してコードを簡略化できます。


9
Observable / http / async呼び出しからの応答を角度で返すにはどうすればよいですか?
サーバーにhttpリクエストを送信してデータを取得するオブザーバブルを返すサービスがあります。私はこのデータを使いたいのですが、いつでも手に入れてしまいundefinedます。どうしたの? サービス: @Injectable() export class EventService { constructor(private http: Http) { } getEventList(): Observable<any>{ let headers = new Headers({ 'Content-Type': 'application/json' }); let options = new RequestOptions({ headers: headers }); return this.http.get("http://localhost:9999/events/get", options) .map((res)=> res.json()) .catch((err)=> err) } } 成分: @Component({...}) export class EventComponent { myEvents: any; constructor( private es: …

7
$ .when.apply($、someArray)は何をしますか?
私はDeferredsとPromisesについて読んでいて、出会い続けてい$.when.apply($, someArray)ます。私はこれが正確に何をするかについて少し不明確です、1行が正確に機能する(コードスニペット全体ではなく)との説明を探しています。ここにいくつかのコンテキストがあります: var data = [1,2,3,4]; // the ids coming back from serviceA var processItemsDeferred = []; for(var i = 0; i < data.length; i++){ processItemsDeferred.push(processItem(data[i])); } $.when.apply($, processItemsDeferred).then(everythingDone); function processItem(data) { var dfd = $.Deferred(); console.log('called processItem'); //in the real world, this would probably make an AJAX call. setTimeout(function() …

4
ポートを同期的に読み書きするときに再帰を回避しますか?
Rebol 3のすべてのポート操作は非同期です。同期通信を行うために見つけることができる唯一の方法は、を呼び出すことwaitです。 ただし、この場合の待機の呼び出しの問題は、すべての開いているポートのイベントをチェックすることです(待機に渡されるポートブロックにない場合でも)。次に、応答するイベントハンドラーを呼び出しますが、これらのイベントハンドラーの1つで読み取り/書き込みを実行できます。その結果、「待機」の再帰呼び出しが発生する可能性があります。 どうすればこれを回避できますか?
108 asynchronous  io  rebol  rebol3 

4
デフォルトですべての関数を非同期にする必要がないのはなぜですか?
.net 4.5 の非同期待機パターンは、パラダイムの変化です。それは本当であるにはほとんど良すぎる。 ブロッキングが過去のものであるため、いくつかのIO負荷の高いコードをasync-awaitに移植しています。 かなりの数の人々が非同期待機とゾンビの蔓延を比較しており、私はそれがかなり正確であると感じました。非同期コードは他の非同期コードに似ています(非同期関数を待つには非同期関数が必要です)。したがって、ますます多くの関数が非同期になり、これがコードベースで成長し続けます。 関数を非同期に変更することは、幾分反復的で想像力に欠ける作業です。async宣言でキーワードをスローし、戻り値をラップするTask<>と、ほとんど完了です。全体のプロセスがどれほど簡単であるかを不安にさせており、すぐにテキスト置換スクリプトが私にとっての「移植」のほとんどを自動化します。 そして今、質問..すべてのコードがゆっくりと非同期になっている場合は、デフォルトですべてを非同期にしないのはなぜですか? 私が仮定する明白な理由はパフォーマンスです。Async-awaitにはオーバーヘッドがあり、非同期である必要のないコードがあり、できればそうするべきではありません。ただし、パフォーマンスのみが問題である場合、いくつかの巧妙な最適化によって、オーバーヘッドが不要になったときに自動的にオーバーヘッドを取り除くことができます。「ファストパス」の最適化について読みましたが、それだけでほとんどの問題を解決できるようです。 たぶん、これはガベージコレクターによってもたらされるパラダイムシフトに匹敵します。GCの初期の頃は、自分のメモリを解放する方が明らかに効率的でした。しかし、大衆は依然として自動収集を選択しており、効率が低くなる可能性のあるより安全で単純なコードを支持しています(そして、それは間違いなくもう真実ではありません)。多分これはここに当てはまるはずですか?なぜすべての関数が非同期ではないのですか?

4
JavaScript Promiseが解決するのを待ってから関数を再開するにはどうすればよいですか?
単体テストを行っています。テストフレームワークは、ページをiFrameに読み込み、そのページに対してアサーションを実行します。各テストを開始する前にPromise、iFrameのonloadイベントを呼び出すようresolve()に設定し、iFrameを設定しsrc、promiseを返すを作成します。 したがって、を呼び出すだけloadUrl(url).then(myFunc)で、ページがロードされるのを待ってから何を実行することもできmyFuncます。 この種のパターンは、主にDOMへの変更を許可するために(URLのロードだけでなく)、テストのあちこちで使用されています(たとえば、ボタンのクリックを模倣し、divが非表示になって表示されるのを待ちます)。 この設計の欠点は、数行のコードを含む匿名関数を常に記述していることです。さらに、回避策(QUnit's assert.async())がありますが、プロミスを定義するテスト関数は、プロミスが実行される前に完了します。 から値を取得する方法、Promiseまたは.NETのように解決されるまで待機(ブロック/スリープ)する方法があるかどうか疑問に思っていますIAsyncResult.WaitHandle.WaitOne()。私はJavaScriptがシングルスレッドであることを知っていますが、それが関数が生成できないことを意味しないことを願っています。 本質的に、正しい順序で結果を吐き出すために以下を取得する方法はありますか? function kickOff() { return new Promise(function(resolve, reject) { $("#output").append("start"); setTimeout(function() { resolve(); }, 1000); }).then(function() { $("#output").append(" middle"); return " end"; }); }; function getResultFrom(promise) { // todo return " end"; } var promise = kickOff(); var result = getResultFrom(promise); $("#output").append(result); <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> …

5
どのように.NETで制御フローを実装して待機するのですか?
yieldキーワードを理解しているように、イテレーターブロック内から使用すると、制御のフローが呼び出し元のコードに戻り、イテレーターが再度呼び出されると、中断したところから再開されます。 また、await呼び出し先を待つだけでなく、呼び出し元に制御を戻し、呼び出し元が中断したところから再開するawaitsがメソッドをたます。 つまり、スレッドはありません。、非同期との「並行性」は、巧妙な制御の流れによって引き起こされる幻想であり、その詳細は構文によって隠されています。 現在、私は以前のアセンブリプログラマであり、命令ポインタやスタックなどに精通しており、通常の制御フロー(サブルーチン、再帰、ループ、分岐)がどのように機能するかを理解しています。しかし、これらの新しい構成要素-私はそれらを取得しません。 にawait到達すると、ランタイムはどのコードが次に実行する必要があるかをどのようにして知るのでしょうか?いつ中断したところから再開できるか、どのようにしてそれをどこで覚えているか?現在のコールスタックはどうなりますか?どういうわけか保存されますか?呼び出し元のメソッドがそれより前に他のメソッド呼び出しを行うとawaitどうなりますか?スタックが上書きされないのはなぜですか?そして、例外が発生してスタックが解放された場合、ランタイムはどのようにしてこれらすべてを処理しますか? yield到達したとき、ランタイムは、物事をピックアップする必要があるポイントをどのように追跡しますか?イテレータの状態はどのように保存されますか?


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