タグ付けされた質問 「async-await」

これは、asyncおよびawaitキーワードを使用して、さまざまなプログラミング言語でサポートされている非同期プログラミングモデルをカバーしています。

10
非同期機能+ await + setTimeoutの組み合わせ
私は新しい非同期機能を使用しようとしています。私の問題を解決することが将来的に他の人の役に立つことを願っています。これは機能している私のコードです: async function asyncGenerator() { // other code while (goOn) { // other code var fileList = await listFiles(nextPageToken); var parents = await requestParents(fileList); // other code } // other code } function listFiles(token) { return gapi.client.drive.files.list({ 'maxResults': sizeResults, 'pageToken': token, 'q': query }); } 問題は、whileループの実行速度が速すぎ、スクリプトが1秒あたりの送信リクエスト数が多すぎることです。そのため、リクエストを遅延させるスリープ機能を構築したいと思います。したがって、この関数を使用して他のリクエストを遅らせることもできます。リクエストを遅らせる別の方法がある場合は、お知らせください。 とにかく、これは動作しない私の新しいコードです。リクエストの応答は、setTimeout内の匿名非同期関数に返されますが、スリープ関数respに応答を返す方法がわかりません。最初のasyncGenerator関数に追加します。 async function asyncGenerator() …

3
Task.Runをメソッドに入れて非同期にする必要がありますか?
私は非同期待機を最も単純な形で理解しようとしています。この例のために2つの数値を追加する非常に単純なメソッドを作成したいと思います。当然のことながら、処理時間はまったくありません。ここで例を作成するだけです。 例1 private async Task DoWork1Async() { int result = 1 + 2; } 例2 private async Task DoWork2Async() { Task.Run( () => { int result = 1 + 2; }); } 待機DoWork1Async()すると、コードは同期または非同期で実行されますか? Task.RunUIスレッドをブロックしないように、メソッドを待機可能かつ非同期にするために同期コードをラップする必要がありますか? 私のメソッドがaであるTaskかreturn であるかを理解しようとしていますTask<T>が、コードをラップしTask.Runて非同期にする必要があります。 馬鹿げた質問だと思いますが、ネット上で非同期Task.Runまたはa やにラップされていないコードを待っている人々の例を目にしStartNewます。

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 { …

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

7
C#で「return await」の目的は何ですか?
このようなメソッドを書くシナリオはありますか? public async Task<SomeResult> DoSomethingAsync() { // Some synchronous code might or might not be here... // return await DoAnotherThingAsync(); } これの代わりに: public Task<SomeResult> DoSomethingAsync() { // Some synchronous code might or might not be here... // return DoAnotherThingAsync(); } 理にかなっていますか? 内部呼び出しからreturn await直接戻ることができるのに、なぜ構文を使用するのですか?Task<T>DoAnotherThingAsync() return awaitたくさんの場所でコードが見つかるので、何かを見落としたかもしれません。しかし、私が理解している限り、この場合はasync / awaitキーワードを使用せず、タスクを直接返すことは機能的に同等です。なぜ追加awaitレイヤーの追加オーバーヘッドを追加するのですか?
251 c#  .net  .net-4.5  async-await 

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

10
結果が異なる複数のタスクを待機しています
私には3つのタスクがあります。 private async Task<Cat> FeedCat() {} private async Task<House> SellHouse() {} private async Task<Tesla> BuyCar() {} 私のコードを続行する前に、これらすべてを実行する必要があり、それぞれの結果も必要です。結果に共通点はありません 3つのタスクが呼び出されて完了するのを待って結果を取得するにはどうすればよいですか?

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 …

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; }

4
いつTask.Yield()を使用しますか?
私はasync / awaitなどTaskを使用Task.Yield()していますが、これまで使用したことがなく、すべての説明があっても正直なところ、この方法が必要な理由がわかりません。 誰かYield()が必要な場所で良い例を示すことができますか?
218 c#  async-await 

2
ラムダ式を非同期にマークするにはどうすればよいですか?
私はこのコードを持っています: private async void ContextMenuForGroupRightTapped(object sender, RightTappedRoutedEventArgs args) { CheckBox ckbx = null; if (sender is CheckBox) { ckbx = sender as CheckBox; } if (null == ckbx) { return; } string groupName = ckbx.Content.ToString(); var contextMenu = new PopupMenu(); // Add a command to edit the current Group contextMenu.Commands.Add(new …

8
ASP.NET MVCで非同期コントローラーを使用する必要があるのはいつですか?
ASP.NET MVCで非同期アクションを使用するいくつかの懸念があります。アプリのパフォーマンスが向上するのはいつですか? ASP.NET MVCのどこでも非同期アクションを使用するのは良いことですか? 待機可能なメソッドについて:(EF / NHibernate /その他のORMを介して)データベースにクエリを実行する場合は、async / awaitキーワードを使用する必要がありますか? 何回で非同期データベースを照会するためのawaitキーワードを使用することができる1つのアクションメソッド?

6
Task.Start / WaitとAsync / Awaitの違いは何ですか?
私は何かが足りないかもしれませんが、行うことの違いは何ですか: public void MyMethod() { Task t = Task.Factory.StartNew(DoSomethingThatTakesTime); t.Wait(); UpdateLabelToSayItsComplete(); } public async void MyMethod() { var result = Task.Factory.StartNew(DoSomethingThatTakesTime); await result; UpdateLabelToSayItsComplete(); } private void DoSomethingThatTakesTime() { Thread.Sleep(10000); }


3
C#で非同期メソッドをどのように作成しますか?
私が読んだすべてのブログ投稿は、C#で非同期メソッドを使用する方法を説明していますが、奇妙な理由で、独自の非同期メソッドを作成して使用する方法を説明していません。だから私は今私の方法を消費するこのコードを持っています: private async void button1_Click(object sender, EventArgs e) { var now = await CountToAsync(1000); label1.Text = now.ToString(); } そして私はこのメソッドを書いたCountToAsync: private Task<DateTime> CountToAsync(int num = 1000) { return Task.Factory.StartNew(() => { for (int i = 0; i < num; i++) { Console.WriteLine("#{0}", i); } }).ContinueWith(x => DateTime.Now); } これ、の使用Task.Factory、非同期メソッドを作成する最良の方法ですか、それとも別の方法で作成する必要がありますか?
196 c#  async-await  c#-5.0 

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