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

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

12
Javaでメソッドを非同期に呼び出す方法
私は最近Goのgoroutinesを見ていて、Javaに似たものがあればいいと思いました。私がメソッド呼び出しを並列化する一般的な方法を検索した限り、次のようなことをすることです: final String x = "somethingelse"; new Thread(new Runnable() { public void run() { x.matches("something"); } }).start(); それはあまりエレガントではありません。これを行うより良い方法はありますか?プロジェクトでそのようなソリューションが必要だったので、非同期メソッド呼び出しの周りに独自のラッパークラスを実装することにしました。 J-Goでラッパークラスを公開しました。しかし、それが良い解決策かどうかはわかりません。使い方は簡単です: SampleClass obj = ... FutureResult<Integer> res = ... Go go = new Go(obj); go.callLater(res, "intReturningMethod", 10); //10 is a Integer method parameter //... Do something else //... System.out.println("Result: "+res.get()); //Blocks until …

19
スクリプトを非同期にロードする
いくつかのプラグイン、カスタムウィジェット、およびJQueryのその他のライブラリを使用しています。その結果、いくつかの.jsファイルと.cssファイルがあります。読み込みに時間がかかるため、サイトのローダーを作成する必要があります。すべてをインポートする前にローダーを表示できると便利です。 <script type="text/javascript" src="js/jquery-1.6.2.min.js"></script> <script type="text/javascript" src="js/myFunctions.js"></script> <link type="text/css" href="css/main.css" rel="stylesheet" /> ... .... etc JavaScriptライブラリを非同期でインポートできるチュートリアルをいくつか見つけました。たとえば、私は次のようなことができます: (function () { var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'js/jquery-ui-1.8.16.custom.min.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x); })(); 何らかの理由で、すべてのファイルに対して同じことをすると、ページが機能しません。私は問題がどこにあるかを見つけるために長い間努力してきましたが、私はそれを見つけることができません。まず、それはおそらく一部のJavaScript関数が他の関数に依存しているためだと思いました。しかし、タイムアウト関数を使用してそれらを正しい順序でロードし、1つが完了したときに次のページに進んでも、ページがまだ奇妙に動作します。たとえば、リンクなどをクリックできません...アニメーションはまだ機能します。 いずれかの方法 これが私が考えていることです...私はブラウザがキャッシュを持っていると思います。そのため、最初にページをロードするのに時間がかかり、次にページをロードするのに時間がかかります。したがって、私が考えているのは、index.htmlページを、このすべてのファイルを非同期でロードするページに置き換えることです。ajaxが完了すると、それらすべてのファイルがロードされ、使用する予定のページにリダイレクトされます。そのページを使用する場合、ファイルはブラウザのキャッシュに含まれているはずなので、ロードに時間がかからないはずです。インデックスページ(.jsファイルと.cssファイルが非同期で読み込まれるページ)でエラーが発生することは気にしません。ローダーを表示し、完了したらページをリダイレクトします... このアイデアは良い代替案ですか?または私は非同期にメソッドを実装しようとし続ける必要がありますか? 編集 すべてを非同期でロードする方法は次のとおりです: importScripts(); function importScripts() { //import: …

7
socket.shutdownとsocket.close
私は最近、次のようなコードを少し見ました(もちろん、sockはソケットオブジェクトです)。 sock.shutdown(socket.SHUT_RDWR) sock.close() ソケットでshutdownを呼び出してソケットを閉じる目的は何ですか?違いがある場合、このソケットは非ブロッキングIOに使用されています。

8
SyntaxError:予期しないトークン関数-Async Await Nodejs
私は自分のコードのいくつかでNodeバージョン6.2.1を使用する実験をしていました。ハイパーコールバック指向のコードのほとんどを、見た目が良く、パフォーマンスの良いものに移行する予定でした。 ノードコードを実行しようとすると、ターミナルがエラーをスローする理由がわかりません。 helloz.js (async function testingAsyncAwait() { await console.log("Print me!"); })(); ログ- BOZZMOB-M-T0HZ:rest bozzmob$ node helloz.js /Users/bozzmob/Documents/work/nextgennms/rest/helloz.js:1 (function (exports, require, module, __filename, __dirname) { (async function testingAsyncAwait() { ^^^^^^^^ SyntaxError: Unexpected token function at Object.exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:513:28) at Object.Module._extensions..js (module.js:550:10) at Module.load (module.js:458:32) at tryModuleLoad (module.js:417:12) at Function.Module._load …

10
Node.jsまたはJavaScriptの非同期関数呼び出しを同期関数にラップする方法
関数を公開するライブラリを管理しているとしますgetData。ユーザーはそれを呼び出して実際のデータを取得します。 var output = getData(); 内部ではデータがファイルに保存されるため、getDataNode.jsビルトインを使用して実装しますfs.readFileSync。それは明らかだ両方getDataとfs.readFileSyncの同期機能があります。ある日、基礎となるデータソースを、非同期にのみアクセスできるMongoDBなどのリポジトリに切り替えるように言われました。また、ユーザーを怒らせるのを避けるように言われましたgetData。APIを変更して、Promiseのみを返すか、コールバックパラメータを要求することはできません。どのようにして両方の要件を満たしますか? コールバック/約束を使用する非同期関数は、JavasSriptとNode.jsのDNAです。自明でないJSアプリはおそらくこのコーディングスタイルに浸透しています。しかし、この実践は、いわゆる運命のコールバックピラミッドに簡単につながる可能性があります。さらに悪いことに、呼び出しチェーン内の呼び出し元のコードが非同期関数の結果に依存している場合、それらのコードもコールバック関数にラップする必要があり、呼び出し元にコーディングスタイルの制約を課します。大規模なグローバルリファクタリングを回避するために、非同期関数(サードパーティのライブラリで提供されることが多い)を同期関数にカプセル化する必要がある場合があります。この問題に関する解決策の検索は、通常、ノードファイバーで終わりましたまたはそれから派生したnpmパッケージ。しかし、ファイバーは私が直面している問題を解決できません。ファイバーの作者が提供した例でさえ、欠陥を示していました。 ... Fiber(function() { console.log('wait... ' + new Date); sleep(1000); console.log('ok... ' + new Date); }).run(); console.log('back in main'); 実際の出力: wait... Fri Jan 21 2011 22:42:04 GMT+0900 (JST) back in main ok... Fri Jan 21 2011 22:42:05 GMT+0900 (JST) 関数Fiberが非同期関数のスリープを本当に同期に変換する場合、出力は次のようになります。 wait... Fri Jan 21 …


4
Node JS Promise.allおよびforEach
非同期メソッドを公開する構造のような配列があります。asyncメソッドを呼び出すと、配列構造が返され、さらに多くのasyncメソッドが公開されます。この構造から取得した値を格納する別のJSONオブジェクトを作成しているので、コールバックでの参照の追跡に注意する必要があります。 私はブルートフォースソリューションをコーディングしましたが、より慣用的またはクリーンなソリューションを学びたいと思います。 パターンは、nレベルのネストに対して繰り返し可能である必要があります。 囲んでいるルーチンをいつ解決するかを決定するには、promise.allまたは同様の手法を使用する必要があります。 すべての要素が非同期呼び出しを行う必要があるとは限りません。したがって、ネストされたpromise.allでは、インデックスに基づいてJSON配列要素に単純に割り当てることはできません。それでも、ネストされたforEachでpromise.allのようなものを使用して、すべてのプロパティの割り当てが、含まれているルーチンを解決する前に行われていることを確認する必要があります。 Bluebird promise libを使用していますが、これは必須ではありません ここにいくつかの部分的なコードがあります- var jsonItems = []; items.forEach(function(item){ var jsonItem = {}; jsonItem.name = item.name; item.getThings().then(function(things){ // or Promise.all(allItemGetThingCalls, function(things){ things.forEach(function(thing, index){ jsonItems[index].thingName = thing.name; if(thing.type === 'file'){ thing.getFile().then(function(file){ //or promise.all? jsonItems[index].filesize = file.getSize();

10
Pythonから外部コマンドを非同期に実行するにはどうすればよいですか?
Pythonスクリプトから非同期にシェルコマンドを実行する必要があります。これは、外部コマンドがオフになり、必要なことをすべて実行している間も、Pythonスクリプトを実行し続けたいことを意味します。 私はこの投稿を読みました: Pythonで外部コマンドを呼び出す それから私は外に出ていくつかのテストos.system()を行いました&が、コマンドの最後に使用するように提供されるジョブを実行するように見えるので、コマンドが戻るのを待つ必要はありません。これがそのようなことを達成するための適切な方法であるかどうか私は疑問に思っていますか?試してみましたcommands.call()が、外部コマンドでブロックされるため、うまくいきません。 os.system()これを使用することが望ましいか、他の方法を試すべきかどうかを教えてください。

6
非同期でファイルを読み取る方法/適切に待つ?
async/のawait仕組みがわかりません。少しはわかりますが、うまくいきません。 function loadMonoCounter() { fs.readFileSync("monolitic.txt", "binary", async function(err, data) { return await new Buffer( data); }); } module.exports.read = function() { console.log(loadMonoCounter()); }; 私は、私が使用することができます知っているreadFileSyncが、私がしなければ、私は私が理解することは決してないだろう知っているasync/ await私はちょうど問題を埋めます。 目標:loadMonoCounter()ファイルのコンテンツを呼び出して返します。 そのファイルは、incrementMonoCounter()呼び出されるたびに(ページの読み込みごとに)増分されます。このファイルには、バッファのダンプがバイナリで含まれており、SSDに保存されます。 何をしても、エラーまたはundefinedコンソールが表示されます。

4
「async void」イベントハンドラーを回避する必要がありますか?
async void保留中のタスクの追跡がなく、このようなメソッド内でスローされる可能性のある例外を処理するのが難しいため、タスクを開始するためにファイアアンドフォーゲットメソッドを使用することは、一般的に悪い考えと考えられます。 通常、async voidイベントハンドラーも回避する必要がありますか?例えば、 private async void Form_Load(object sender, System.EventArgs e) { await Task.Delay(2000); // do async work // ... } 次のように書き直すことができます。 Task onFormLoadTask = null; // track the task, can implement cancellation private void Form_Load(object sender, System.EventArgs e) { this.onFormLoadTask = OnFormLoadTaskAsync(sender, e); } private async Task OnFormLoadTaskAsync(object sender, …

8
Playgroundで非同期コールバックを実行する方法
多くのCocoaおよびCocoaTouchメソッドには、Objective-CのブロックおよびSwiftのClosuresとして実装された完了コールバックがあります。ただし、プレイグラウンドでこれらを試してみると、完了が呼び出されることはありません。例えば: // Playground - noun: a place where people can play import Cocoa import XCPlayground let url = NSURL(string: "http://stackoverflow.com") let request = NSURLRequest(URL: url) NSURLConnection.sendAsynchronousRequest(request, queue:NSOperationQueue.currentQueue() { response, maybeData, error in // This block never gets called? if let data = maybeData { let contents = NSString(data:data, encoding:NSUTF8StringEncoding) println(contents) …

1
C ++ 11のasync(launch :: async)は、高価なスレッドの作成を回避するためにスレッドプールを廃止しますか?
それはこの質問に緩く関連しています:std :: threadはC ++ 11にプールされていますか?。質問は異なりますが、意図は同じです。 質問1:高価なスレッドの作成を回避するために、独自の(またはサードパーティのライブラリ)スレッドプールを使用することはまだ意味がありますか? 他の質問の結論は、std::threadプールに依存することはできないということでした(そうでない場合もあります)。ただし、std::async(launch::async)プールされる可能性ははるかに高いようです。 それは標準によって強制されているとは思わないが、私見では、スレッドの作成が遅い場合は、すべての優れたC ++ 11実装がスレッドプーリングを使用すると予想します。新しいスレッドを作成するのが安価なプラットフォームでのみ、私は彼らが常に新しいスレッドを生成することを期待します。 質問2:これは私が考えていることですが、それを証明する事実はありません。私はよく間違えられるかもしれません。それは教育を受けた推測ですか? 最後に、ここでは、スレッドの作成が次のように表現できると私が考える方法を最初に示すサンプルコードをいくつか提供しましたasync(launch::async)。 例1: thread t([]{ f(); }); // ... t.join(); なる auto future = async(launch::async, []{ f(); }); // ... future.wait(); 例2:スレッドを起動して忘れる thread([]{ f(); }).detach(); なる // a bit clumsy... auto dummy = async(launch::async, []{ f(); }); // ... but …

2
task.Resultと同じ完了したタスクを待ちます。
私は現在、Stephen Clearyの「C#クックブックの並行性」を読んでおり、次のテクニックに気づきました。 var completedTask = await Task.WhenAny(downloadTask, timeoutTask); if (completedTask == timeoutTask) return null; return await downloadTask; downloadTaskへの呼び出しでhttpclient.GetStringAsync、timeoutTask実行中Task.Delayです。 タイムアウトしなかった場合downloadTaskは、すでに完了しています。downloadTask.Resultタスクがすでに完了している場合、を返すのではなく、2回目の待機を行う必要があるのはなぜですか?

5
CancellationTokenプロパティの使用方法は?
前のクラスRulyCancelerのコードと比較して、を使用してコードを実行したいと思いました CancellationTokenSource。 キャンセルトークンで説明されているように、つまり例外をスロー/キャッチせずにそれを使用するにはどうすればよいですか?IsCancellationRequestedプロパティを使用できますか? 私はそれを次のように使用しようとしました: cancelToken.ThrowIfCancellationRequested(); そして try { new Thread(() => Work(cancelSource.Token)).Start(); } catch (OperationCanceledException) { Console.WriteLine("Canceled!"); } しかし、これによりcancelToken.ThrowIfCancellationRequested();メソッドで実行時エラーが発生しましたWork(CancellationToken cancelToken): System.OperationCanceledException was unhandled Message=The operation was canceled. Source=mscorlib StackTrace: at System.Threading.CancellationToken.ThrowIfCancellationRequested() at _7CancellationTokens.Token.Work(CancellationToken cancelToken) in C:\xxx\Token.cs:line 33 at _7CancellationTokens.Token.<>c__DisplayClass1.<Main>b__0() in C:\xxx\Token.cs:line 22 at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, …

2
Task <int>はどのようにしてintになりますか?
この方法があります: async Task&lt;int&gt; AccessTheWebAsync() { HttpClient client = new HttpClient(); Task&lt;string&gt; getStringTask = client.GetStringAsync("http://msdn.microsoft.com"); // You can do work here that doesn't rely on the string from GetStringAsync. DoIndependentWork(); string urlContents = await getStringTask; //The thing is that this returns an int to a method that has a return type …

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