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

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

2
Entity Frameworkの非同期操作が完了するまでに10倍の時間がかかる
Entity Framework 6を​​使用してデータベースを処理しているMVCサイトがあり、すべてを非同期コントローラーとして実行し、データベースへの呼び出しを非同期対応として実行するように変更しています(例:ToListAsync())。 ToList()の代わりに) 私が抱えている問題は、クエリを非同期に変更するだけで信じられないほど遅くなることです。 次のコードは、データコンテキストから「アルバム」オブジェクトのコレクションを取得し、かなり単純なデータベース結合に変換されます。 // Get the albums var albums = await this.context.Albums .Where(x => x.Artist.ID == artist.ID) .ToListAsync(); 作成されたSQLは次のとおりです。 exec sp_executesql N'SELECT [Extent1].[ID] AS [ID], [Extent1].[URL] AS [URL], [Extent1].[ASIN] AS [ASIN], [Extent1].[Title] AS [Title], [Extent1].[ReleaseDate] AS [ReleaseDate], [Extent1].[AccurateDay] AS [AccurateDay], [Extent1].[AccurateMonth] AS [AccurateMonth], [Extent1].[Type] AS [Type], [Extent1].[Tracks] …

1
待機可能なThread.Sleepを取得する方法?
私はawait / sleepパラダイムに基づいてネットワークにバインドされたアプリケーションを書いています。 時々、接続エラーが発生し、私の経験では、しばらく待ってから操作を再試行するのにお金がかかります。 問題は、await / asyncでThread.Sleepまたは他の同様のブロック操作を使用すると、呼び出し元スレッドのすべてのアクティビティをブロックすることです。 同じ効果を得るには、Thread.Sleep(10000)を何に置き換えればよいですか。 await Thread.SleepAsync(10000) ? 更新 私は追加のスレッドを作成せずにこれを行う答えを好みます

7
非同期メソッドが完了するのを待つ方法は?
USB HIDクラスデバイスにデータを転送するWinFormsアプリケーションを書いています。私のアプリケーションは、こちらにある優れたGeneric HIDライブラリv6.0を使用しています。簡単に言えば、デバイスにデータを書き込む必要がある場合、次のコードが呼び出されます。 private async void RequestToSendOutputReport(List<byte[]> byteArrays) { foreach (byte[] b in byteArrays) { while (condition) { // we'll typically execute this code many times until the condition is no longer met Task t = SendOutputReportViaInterruptTransfer(); await t; } // read some data from device; we need to wait …

5
非同期ラムダを使用した並列foreach
コレクションを並行して処理したいのですが、実装に問題があるので、助けが必要です。 並列ループのラムダ内で、C#でasyncとマークされたメソッドを呼び出す場合に問題が発生します。例えば: var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, async item => { // some pre stuff var response = await GetData(item); bag.Add(response); // some post stuff } var count = bag.Count; 作成されたすべてのスレッドは事実上単なるバックグラウンドスレッドであり、Parallel.ForEach呼び出しは完了を待機しないため、問題はカウントが0で発生します。asyncキーワードを削除すると、メソッドは次のようになります。 var bag = new ConcurrentBag<object>(); Parallel.ForEach(myCollection, item => { // some pre stuff var responseTask = await GetData(item); …

5
.net 4でのasync-awaitの使用
私は現在、C#5の非同期待機機能から多くの利益を得るアプリケーションの作成を開始しています。しかし、使用するVSと非同期ランタイムのバージョンがわかりません。 OSの人気チャートを見ると、Windows XPをさらに3年間サポートする必要があります。.net 4.5は新しいバージョンのWindowsでのみ動作するようなので、.net 4.0をターゲットにする必要があります。開発マシンはWindows 7を使用しているため、新しいバージョンのVSを使用しても問題ありません。 これを行うには、まずコンパイラを選択する必要があります。 VS2010とAsyncCTP VS2012プレビュー(および最終的に到着)、ターゲットを.net 4.0に設定 Mono(2.12はasync-awaitがあるように見えますが、IDEとしてMonoDevelopよりもVSを使用するのが好きです) コード生成のバグが少ないのはどれですか。Jon Skeetのブログを見ると、VS2012プレビューはCTPよりもコードジェネレーターを使用することはありません。 さらに重要なのは、どのランタイムを使用するか? VS2012には、.net 4で使用する再配布可能な非同期ランタイムが含まれていますか? AsyncCTPランタイムを参照して、プレビューを使用してコードをコンパイルすることができました。しかし、CTPには奇妙なライセンス条件があるため、長期的なソリューションとしては適切ではないように見えます。 または、サードパーティの実装を使用する必要がありますか?たぶん、monoには1つありますか? ライブラリを配布するために、ある種のインストーラーではなく、単にアプリケーションと同じディレクトリにdllを置くことを好みます。 また、mono + Linux / MacOSで変更を加えなくてもバイナリが機能するようにしたいのですが。したがって、ランタイムは組み込みのモノ(おそらく2.12)と互換性があるか、非Windows OSでの使用を許可する必要があります。

10
この呼び出しを待機していないことを警告し、現在のメソッドの実行を続行します
ちょうどVS2012を手に入れ、ハンドルを取得しようとしていますasync。 ブロッキングソースから値をフェッチするメソッドがあるとします。メソッドの呼び出し元をブロックしたくありません。値が到着したときに呼び出されるコールバックを受け取るメソッドを作成することもできますが、C#5を使用しているため、メソッドを非同期にして、呼び出し側がコールバックを処理する必要がないようにします。 // contrived example (edited in response to Servy's comment) public static Task<string> PromptForStringAsync(string prompt) { return Task.Factory.StartNew(() => { Console.Write(prompt); return Console.ReadLine(); }); } これを呼び出すメソッドの例を次に示します。PromptForStringAsync非同期でない場合、このメソッドはコールバック内にコールバックをネストする必要があります。asyncを使用すると、非常に自然な方法でメソッドを記述できます。 public static async Task GetNameAsync() { string firstname = await PromptForStringAsync("Enter your first name: "); Console.WriteLine("Welcome {0}.", firstname); string lastname = await PromptForStringAsync("Enter …
135 c#  async-await 

2
非同期アクションデリゲートメソッドはどのように実装しますか?
少し背景情報。 私はWeb APIスタックを学び、SuccessやErrorCodesなどのパラメーターを持つ「Result」オブジェクトの形式ですべてのデータをカプセル化しようとしています。 ただし、メソッドが異なれば結果やエラーコードも異なりますが、結果オブジェクトは一般的に同じ方法でインスタンス化されます。 時間を節約し、C#の非同期/待機機能の詳細を学ぶために、Web APIアクションのすべてのメソッド本体を非同期アクションデリゲートでラップしようとしていますが、ちょっとした問題に巻き込まれています... 次のクラスがあるとします。 public class Result { public bool Success { get; set; } public List<int> ErrorCodes{ get; set; } } public async Task<Result> GetResultAsync() { return await DoSomethingAsync<Result>(result => { // Do something here result.Success = true; if (SomethingIsTrue) { result.ErrorCodes.Add(404); result.Success = false; } …

5
async await returnタスク
誰かがこれが同期メソッドに何を意味するのか説明できますか?メソッドをに変更しようとするとasync、VSはそれについて文句を言います。 これは機能します: public Task MethodName() { return Task.FromResult<object>(null); } これは機能しません: public async Task MethodName() { return Task.FromResult<object>(null); } だから基本的に私はこれが正確に何を意味するのか知りたいです: Task.FromResult<object>(null);

3
.Net 4.5の非同期HttpClientは、集中的な負荷のあるアプリケーションにとって悪い選択ですか?
私は最近、非同期の方法で生成できるHTTP呼び出しのスループットをテストするための単純なアプリケーションと、従来のマルチスレッドアプローチを作成しました。 アプリケーションは、事前定義された数のHTTP呼び出しを実行でき、最後にそれらを実行するために必要な合計時間を表示します。テスト中、すべてのHTTP呼び出しはローカルIISサーバーに対して行われ、小さなテキストファイル(サイズは12バイト)を取得しました。 非同期実装のコードの最も重要な部分を以下に示します。 public async void TestAsync() { this.TestInit(); HttpClient httpClient = new HttpClient(); for (int i = 0; i < NUMBER_OF_REQUESTS; i++) { ProcessUrlAsync(httpClient); } } private async void ProcessUrlAsync(HttpClient httpClient) { HttpResponseMessage httpResponse = null; try { Task<HttpResponseMessage> getTask = httpClient.GetAsync(URL); httpResponse = await getTask; Interlocked.Increment(ref _successfulCalls); } …

10
async / awaitでnode.jsのファイルシステムを使用する
一部のファイルシステム操作でasync / awaitを使用したいと思います。通常はasync / awaitを使用しているため、正常に動作しますbabel-plugin-syntax-async-functions。 しかし、このコードでnamesは、ifケースが未定義の場合に遭遇します。 import fs from 'fs'; async function myF() { let names; try { names = await fs.readdir('path/to/dir'); } catch (e) { console.log('e', e); } if (names === undefined) { console.log('undefined'); } else { console.log('First Name', names[0]); } } myF(); コードをコールバック地獄バージョンに再構築すると、すべてが正常になり、ファイル名を取得します。ヒントをありがとう。

5
複数の待機よりも単一の「待機Task.WhenAll」を優先する必要があるのはなぜですか?
タスク完了の順序を気にせず、すべて完了する必要がある場合でもawait Task.WhenAll、複数の代わりに使用する必要がありますawaitか?たとえば、DoWork2以下の方法が推奨されますDoWork1(そしてその理由は?): using System; using System.Threading.Tasks; namespace ConsoleApp { class Program { static async Task<string> DoTaskAsync(string name, int timeout) { var start = DateTime.Now; Console.WriteLine("Enter {0}, {1}", name, timeout); await Task.Delay(timeout); Console.WriteLine("Exit {0}, {1}", name, (DateTime.Now - start).TotalMilliseconds); return name; } static async Task DoWork1() { var t1 = DoTaskAsync("t1.1", …

5
「待つ」は機能しますが、タスクを呼び出します。結果がハング/デッドロックします。
次の4つのテストがあり、最後のテストを実行するとハングします。なぜこれが起こるのですか? [Test] public void CheckOnceResultTest() { Assert.IsTrue(CheckStatus().Result); } [Test] public async void CheckOnceAwaitTest() { Assert.IsTrue(await CheckStatus()); } [Test] public async void CheckStatusTwiceAwaitTest() { Assert.IsTrue(await CheckStatus()); Assert.IsTrue(await CheckStatus()); } [Test] public async void CheckStatusTwiceResultTest() { Assert.IsTrue(CheckStatus().Result); // This hangs Assert.IsTrue(await CheckStatus()); } private async Task<bool> CheckStatus() { var restClient = new …
126 c#  nunit  task  deadlock  async-await 

7
ForEachで非同期を使用するにはどうすればよいですか?
ForEachを使用するときに非同期を使用することは可能ですか?以下は私が試しているコードです: using (DataContext db = new DataLayer.DataContext()) { db.Groups.ToList().ForEach(i => async { await GetAdminsFromGroup(i.Gid); }); } エラーが発生します: 「非同期」という名前は現在のコンテキストに存在しません usingステートメントが囲まれているメソッドは、非同期に設定されます。
123 c#  async-await 

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 …

3
MVC5で非同期を使用する利点は何ですか?
違いは何ですか: public ActionResult Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = IdentityManager.Authentication.CheckPasswordAndSignIn(AuthenticationManager, model.UserName, model.Password, model.RememberMe); if (result.Success) { return Redirect("~/home"); } else { AddErrors(result); } } return View(model); } そして: [HttpPost] [AllowAnonymous] [ValidateAntiForgeryToken] public async Task<ActionResult> Login(LoginViewModel model, string returnUrl) { if (ModelState.IsValid) { IdentityResult result = …

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