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

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

7
ブラウザーがリクエストをキャンセルしたときのASP.NET Web API OperationCanceledException
ユーザーがページを読み込むと、ASP.NET Web API 2コントローラーにヒットする1つまたは複数のajax要求が行われます。ユーザーが別のページに移動した場合、これらのajaxリクエストが完了する前に、リクエストはブラウザーによってキャンセルされます。次に、ELMAH HttpModuleは、キャンセルされたリクエストごとに2つのエラーをログに記録します。 エラー1: System.Threading.Tasks.TaskCanceledException: A task was canceled. at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Controllers.ApiControllerActionInvoker.<InvokeActionAsyncCore>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at System.Web.Http.Controllers.ActionFilterResult.<ExecuteAsync>d__2.MoveNext() --- End of stack …

2
awaitとContinueWithの違い
場合誰かが説明できawaitそしてContinueWith次の例では同義かではありません。私は初めてTPLを使用しようとしていますが、すべてのドキュメントを読んでいますが、違いがわかりません。 待ってください: String webText = await getWebPage(uri); await parseData(webText); ContinueWith: Task<String> webText = new Task<String>(() => getWebPage(uri)); Task continue = webText.ContinueWith((task) => parseData(task.Result)); webText.Start(); continue.Wait(); 特定の状況では、どちらが優先されますか?

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

6
コトリンコルーチンでのサスペンド機能の意味
私はコトリンコルーチンを読んでいて、それがsuspend機能に基づいていることを知っています。しかし、どういうsuspend意味ですか? コルーチンまたは関数が中断されますか? https://kotlinlang.org/docs/reference/coroutines.htmlから 基本的に、コルーチンはスレッドをブロックせずに中断できる計算です 「サスペンド機能」とよく言われます。しかし、関数が終了するのを待っているので中断されるのはコルーチンだと思いますか?「一時停止」は通常「操作を停止する」ことを意味します。この場合、コルーチンはアイドル状態です。 weコルーチンは一時停止されていると言えますか? どのコルーチンが一時停止されますか? https://kotlinlang.org/docs/reference/coroutines.htmlから 類推を続けると、await()は、何らかの計算が完了するまでコルーチンを中断してその結果を返す中断関数(したがって、非同期{}ブロック内からも呼び出し可能)にすることができます。 async { // Here I call it the outer async coroutine ... // Here I call computation the inner coroutine val result = computation.await() ... } 🤔「計算が完了するまでコルーチンを一時停止する」とありますが、コルーチンは軽量スレッドのようなものです。したがって、コルーチンが中断されている場合、どのように計算を実行できますか? 私たちは見るawaitに呼び出されたcomputationことがあるかもしれないので、asyncそれを返すDeferredことが別のコルーチンを開始できる手段、 fun computation(): Deferred<Boolean> { return async { true } } quote コルーチンを一時停止するという引用。それsuspendは外側のasyncコルーチン、またはsuspend内側のcomputationコルーチンを意味しますか? いsuspendながら、外側のことを意味しasyncコルーチンが(待っているawait内側のために)computationそれ(アウター、仕上げにコルーチンasyncコルーチン)スレッドプールには空転(名前の由来は、サスペンド)と戻り、スレッド、および時に子computationコルーチンが終了すると、それは(外asyncコルーチン)ウェイクアップし、プールから別のスレッドを取得して続行しますか? …

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回目の待機を行う必要があるのはなぜですか?

7
async / awaitでブロックを試行/キャッチする
私はノード7の非同期/待機機能を掘り下げて、このようなコードに出くわし続けています function getQuote() { let quote = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in …

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を超えません。最も効率的な方法でそれを行う方法?

3
TransactionScopeを非同期で動作するようにする/待つ
私たちのサービスバスにasync/ を統合しようとしawaitています。SingleThreadSynchronizationContextこの例に基づいてhttp://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspxを実装しました。 そして、それは一つのことを除いて、うまく働きます:TransactionScope。中の物を待つTransactionScopeと壊れますTransactionScope。 TransactionScopeasync/ awaitを使ってスレッドに物を保存するため、/ はうまく機能しないようですThreadStaticAttribute。私はこの例外を受け取ります: 「TransactionScopeが正しくネストされていません。」 TransactionScopeタスクをキューに入れる前にデータを保存し、実行する前に復元しようとしましたが、変更されていないようです。そしてTransactionScopeコードは混乱しているので、そこで何が起こっているのかを理解するのは本当に難しいです。 それを機能させる方法はありますか?に代わるものはありTransactionScopeますか?

4
ASP.NET Web APIでasync / awaitを効果的に使用する
async/await私のWeb APIプロジェクトでASP.NET の機能を利用しようとしています。それが私のWeb APIサービスのパフォーマンスに影響を与えるかどうかは、私にはよくわかりません。アプリケーションのワークフローとサンプルコードを以下に示します。 ワークフロー: UIアプリケーション→Web APIエンドポイント(コントローラー)→Web APIサービスレイヤーのメソッドの呼び出し→別の外部Webサービスを呼び出します。(ここに、DBインタラクションなどがあります。) コントローラ: public async Task<IHttpActionResult> GetCountries() { var allCountrys = await CountryDataService.ReturnAllCountries(); if (allCountrys.Success) { return Ok(allCountrys.Domain); } return InternalServerError(); } サービス層: public Task<BackOfficeResponse<List<Country>>> ReturnAllCountries() { var response = _service.Process<List<Country>>(BackOfficeEndpoint.CountryEndpoint, "returnCountries"); return Task.FromResult(response); } 上記のコードをテストし、動作しています。しかし、それがの正しい使い方かどうかはわかりませんasync/await。あなたの考えを共有してください。

4
async / awaitは暗黙的にpromiseを返しますか?
asyncキーワードでマークされた非同期関数が暗黙的にpromiseを返すことを読みました。 async function getVal(){ return await doSomethingAync(); } var ret = getVal(); console.log(ret); しかし、それは首尾一貫していない...仮定doSomethingAsync()がpromise を返し、awaitキーワードがpromise itefではなくpromiseから値を返す場合、私のgetVal関数は暗黙のpromiseではなくその値を返す必要があります。 それでは、具体的にはどうなのでしょうか。asyncキーワードでマークされた関数は暗黙的にpromiseを返しますか、それともそれらが返すものを制御しますか? おそらく、明示的に何かを返さない場合、暗黙的に約束が返されます...? より明確にするために、上記との違いがあります function doSomethingAync(charlie) { return new Promise(function (resolve) { setTimeout(function () { resolve(charlie || 'yikes'); }, 100); }) } async function getVal(){ var val = await doSomethingAync(); // val is not a …

2
同期操作の代わりに非同期WebAPI操作を作成する必要があるのはなぜですか?
作成したWeb APIに次の操作があります。 // GET api/<controller> [HttpGet] [Route("pharmacies/{pharmacyId}/page/{page}/{filter?}")] public CartTotalsDTO GetProductsWithHistory(Guid pharmacyId, int page, string filter = null ,[FromUri] bool refresh = false) { return delegateHelper.GetProductsWithHistory(CustomerContext.Current.GetContactById(pharmacyId), refresh); } このWebサービスの呼び出しは、次の方法でJquery Ajax呼び出しを介して行われます。 $.ajax({ url: "/api/products/pharmacies/<%# Farmacia.PrimaryKeyId.Value.ToString() %>/page/" + vm.currentPage() + "/" + filter, type: "GET", dataType: "json", success: function (result) { vm.items([]); var …

9
「yield return DoSomethingAsync()」を待つことは可能ですか?
通常のイテレーターブロック(つまり、 "yield return")は、 "async"および "await"と互換性がありませんか? これは私が何をしようとしているのかについての良い考えを与えます: async Task<IEnumerable<Foo>> Method(String [] Strs) { // I want to compose the single result to the final result, so I use the SelectMany var finalResult = UrlStrings.SelectMany(link => //i have an Urlstring Collection await UrlString.DownLoadHtmlAsync() //download single result; DownLoadHtmlAsync method will Download the url's …

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

3
.net 4.5のHttpClientでCookieを応答から外そうとするのに苦労しています
正常に動作する次のコードがあります。応答からCookieを取得する方法がわかりません。私の目標は、リクエストにCookieを設定し、レスポンスからCookieを取得できるようにしたいことです。考え? private async Task<string> Login(string username, string password) { try { string url = "http://app.agelessemail.com/account/login/"; Uri address = new Uri(url); var postData = new List<KeyValuePair<string, string>> { new KeyValuePair<string, string>("username", username), new KeyValuePair<string, string>("password ", password) }; HttpContent content = new FormUrlEncodedContent(postData); var cookieJar = new CookieContainer(); var handler = …

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