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

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

7
メソッド名での「Async」サフィックスの使用は、「async」修飾子が使用されているかどうかによって異なりますか?
メソッド名の接尾辞に「非同期」の規則はありますか? 「Async」サフィックスは、修飾子を使用して宣言されたメソッドにのみ追加する必要がありasyncますか? public async Task<bool> ConnectAsync() それとも、この方法だけで返すことは十分ですTask<T>かTask? public Task<bool> ConnectAsync()

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

6
「返品待ち」と「返品保証」の違い
以下のコードサンプルを考えると、動作に違いはありますか。ある場合、それらの違いは何ですか? return await promise async function delay1Second() { return (await delay(1000)); } return promise async function delay1Second() { return delay(1000); } 私が理解しているように、1つ目はasync関数内でエラー処理が行われ、async関数のPromiseからエラーが発生します。ただし、2番目は1ティック少ない必要があります。これは正しいです? このスニペットは、参考のためにPromiseを返すための一般的な関数にすぎません。 function delay(ms) { return new Promise((resolve) => { setTimeout(resolve, ms); }); }

2
RestSharpをasync / awaitで使用する方法
私はRestSharpを使用して、いくつかの非同期C#コードの近代的な例を見つけるのに苦労してるasyncとはawait。私はあります知っているハークによる最近更新されて、私は新しいメソッドを使用する方法がわかりません。 また、操作をキャンセルできるようにキャンセルトークンを提供するにはどうすればよいですか(たとえば、人が待っていることにうんざりしていて、アプリのUIの[キャンセル]ボタンを押した場合)。

5
なぜこの非同期アクションがハングするのですか?
私はC#の新しい使用法呼び出すマルチティアの.Net 4.5アプリケーション持つasyncとawaitそのキーワードだけでハングアップし、私はなぜ見ることができません。 一番下には、データベースユーティリティを拡張する非同期メソッドがありますOurDBConn(基本的には、基になるオブジェクトDBConnectionとDBCommandオブジェクトのラッパー)。 public static async Task<T> ExecuteAsync<T>(this OurDBConn dataSource, Func<OurDBConn, T> function) { string connectionString = dataSource.ConnectionString; // Start the SQL and pass back to the caller until finished T result = await Task.Run( () => { // Copy the SQL connection so that we don't get two commands …

4
コールバックが戻るのを「待つ」方法は?
以下の例のような単純なコールバックを使用する場合: test() { api.on( 'someEvent', function( response ) { return response; }); } async / awaitを使用するように関数を変更するにはどうすればよいですか?具体的には、「someEvent」が1回だけ呼び出されることが保証されていると仮定して、関数testを、次のようにコールバックが実行されるまで返されない非同期関数にしたいと思います。 async test() { return await api.on( 'someEvent' ); }

3
新しいPromise()コンストラクター内でasync / awaitを使用するのはアンチパターンですか?
このasync.eachLimit関数を使用して、一度に最大操作数を制御しています。 const { eachLimit } = require("async"); function myFunction() { return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // do other things that use native promises. }, (error) => { if (error) return reject(error); // resolve here passing the next value. }); }); } …

2
ASP.NET Coreに関連するConfigureAwait(false)?
私はGitHubで問題(https://github.com/HTBox/allReady/issues/1313)に遭遇しました。そこでConfigureAwait(false)、ASP.NET Coreでコードを削除することについて主張し、それを主張しました。 への呼び出しConfigureAwait(false)は冗長であり、何もしません 私がここで見つけることができる最高のものは、答えの「補足」(Stephen Cleary、https: //stackoverflow.com/a/40220190/2805831から)であることを伝えています ASP.NET Coreに「コンテキスト」がなくなりました では、(完全な.Net Frameworkを使用していても)ASP.NET CoreではConfigureAwait(false)本当に不要ですか?場合によっては実際にパフォーマンスが向上するか、結果/セマンティクスに違いがあるか 編集:コンソールアプリケーションまたはIISでホストしている場合、この点で違いますか?

8
ts ES5 / ES3の非同期関数またはメソッドには 'Promise'コンストラクターが必要です
こんにちは、TypeScriptプロジェクトでasync / awaitを使用していますが、次のログを取得しています。 [ts] ES5 / ES3の非同期関数またはメソッドには、「Promise」コンストラクターが必要です。'Promise'コンストラクターの宣言があることを確認するか、--libオプションに 'ES2015'を含めてください。 どうすれば解決できますか?

3
エンティティフレームワーククエリ可能な非同期
私はEntity Framework 6を​​使用していくつかのWeb APIに取り組んでおり、私のコントローラーメソッドの1つは「Get All」で、データベースからテーブルのコンテンツをとして受け取ることを期待していますIQueryable<Entity>。私のリポジトリでは、非同期でEFを使用するのが初めてなので、これを非同期で実行する利点があるかどうか疑問に思っています。 基本的にそれは煮詰めます public async Task<IQueryable<URL>> GetAllUrlsAsync() { var urls = await context.Urls.ToListAsync(); return urls.AsQueryable(); } 対 public IQueryable<URL> GetAllUrls() { return context.Urls.AsQueryable(); } 非同期バージョンは実際にここでパフォーマンス上の利点をもたらしますか、それとも最初に(非同期を使用して)リストに投影し、次にIQueryableに移動することによって不要なオーバーヘッドを招きますか?

3
HttpClientでawaitを使用した非同期呼び出しが返されない
C#Win8 CPのxaml ベースのMetroアプリケーションの内部から電話をかけています。この呼び出しは単にWebサービスをヒットし、JSONデータを返します。 HttpMessageHandler handler = new HttpClientHandler(); HttpClient httpClient = new HttpClient(handler); httpClient.BaseAddress = new Uri("http://192.168.1.101/api/"); var result = await httpClient.GetStreamAsync("weeklyplan"); DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(WeeklyPlanData[])); return (WeeklyPlanData[])ser.ReadObject(result); これはでハングしますawaitが、http呼び出しは実際にはほとんどすぐに戻ります(フィドラーで確認)。これはawait無視されたかのようにハングアップするだけです。 質問する前に -はい-プライベートネットワーク機能がオンになっています。 これがハングする理由はありますか?

5
JavaScriptのpromiseとasync awaitの違いは何ですか?
ECMAScript 6とECMAScript 7の機能を、モバイルとWebの両方のアプリケーションで(Babelのおかげで)すでに使用しています。 最初のステップは明らかにECMAScript 6レベルへの移行でした。私は多くの非同期パターン、約束(本当に有望です)、ジェネレーター(なぜ*記号なのかわからない)などを学びました。これらのうち、約束は私の目的にかなりよく適合しました。そして、私は自分のアプリケーションでそれらをかなり使用しています。 これは、私が基本的なpromiseを実装した方法の例/疑似コードです。 var myPromise = new Promise( function (resolve,reject) { var x = MyDataStore(myObj); resolve(x); }); myPromise.then( function (x) { init(x); }); 時間が経つにつれ、ECMAScript 7の機能に出会いました。その1つはASYNC、AWAITキーワードと関数です。これらを組み合わせると、すばらしい不思議が起こります。私は私の約束のいくつかをに置き換え始めましたasync & await。彼らはプログラミングスタイルに大きな価値を加えているようです。 繰り返しますが、これは私の非同期のawait関数がどのように見えるかの疑似コードです- async function myAsyncFunction (myObj) { var x = new MyDataStore(myObj); return await x.init(); } var returnVal = await myAsyncFunction(obj); …

1
大きなデータでSqlCommand Asyncメソッドを使用した恐ろしいパフォーマンス
非同期呼び出しを使用すると、SQLパフォーマンスに大きな問題が発生します。私は問題を実証するために小さなケースを作成しました。 LANにあるSQL Server 2016(localDBではない)にデータベースを作成しました。 そのデータベースには、WorkingCopy2つの列を持つテーブルがあります。 Id (nvarchar(255, PK)) Value (nvarchar(max)) DDL CREATE TABLE [dbo].[Workingcopy] ( [Id] [nvarchar](255) NOT NULL, [Value] [nvarchar](max) NULL, CONSTRAINT [PK_Workingcopy] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] …

2
同期コードを非同期呼び出しにラップする
ASP.NETアプリケーションには、完了するまでにかなりの時間を消費するメソッドがあります。このメソッドの呼び出しは、ユーザーが提供するキャッシュの状態とパラメーターに応じて、1回のユーザー要求中に最大3回発生する可能性があります。各通話が完了するまでに約1〜2秒かかります。メソッド自体はサービスへの同期呼び出しであり、実装をオーバーライドする可能性はありません。 したがって、サービスへの同期呼び出しは次のようになります。 public OutputModel Calculate(InputModel input) { // do some stuff return Service.LongRunningCall(input); } また、メソッドの使用法は次のとおりです(注:メソッドの呼び出しは複数回発生する可能性があります)。 private void MakeRequest() { // a lot of other stuff: preparing requests, sending/processing other requests, etc. var myOutput = Calculate(myInput); // stuff again } 私はこの方法の同時作業を提供するために実装を私の側から変更しようとしました、そしてこれが私がこれまでに来たものです。 public async Task<OutputModel> CalculateAsync(InputModel input) { return await Task.Run(() => …

5
「この非同期メソッドには「await」演算子がなく、同期的に実行されます」という警告について心配する必要があります。
私はいくつかの非同期メソッドを公開するインターフェースを持っています。より具体的には、TaskまたはTask <T>のいずれかを返すメソッドが定義されています。async / awaitキーワードを使用しています。 私はこのインターフェースを実装している最中です。ただし、これらのメソッドの一部では、この実装には何も待つ必要がありません。そのため、コンパイラの警告「この非同期メソッドには「await」演算子がなく、同期的に実行されます...」という警告が表示されます。 エラーが発生する理由は理解していますが、このコンテキストでそれらについて何かを行う必要があるかどうか疑問に思っています。コンパイラの警告を無視するのは間違っていると感じます。 Task.Runを待つことで修正できることはわかっていますが、安価な操作を数回しか実行していないメソッドでは、それは間違っていると感じます。また、実行に不要なオーバーヘッドが追加されるように聞こえますが、asyncキーワードが存在するため、それがすでに存在するかどうかもわかりません。 警告を無視する必要がありますか、それとも私が見ないこれを回避する方法はありますか?

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