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

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

3
avs vs Task.Wait-Deadlock?
私はかなりの違いを理解していないTask.Waitとしますawait。 ASP.NET WebAPIサービスには、次のような機能があります。 public class TestController : ApiController { public static async Task<string> Foo() { await Task.Delay(1).ConfigureAwait(false); return ""; } public async static Task<string> Bar() { return await Foo(); } public async static Task<string> Ros() { return await Bar(); } // GET api/test public IEnumerable<string> Get() { Task.WaitAll(Enumerable.Range(0, 10).Select(x => …

6
C#でのTask.FromResult <TResult>の用途は何ですか
C#およびTPL(Task Parallel Library)では、TaskクラスはT型の値を生成する進行中の作業を表します。 Task.FromResultメソッドの必要性は何ですか? つまり、すでに生成された値を手元に持っているシナリオで、それをタスクにラップする必要性は何ですか? 頭に浮かぶのは、Taskインスタンスを受け入れる他のメソッドのアダプターとして使用されることだけです。

6
トップレベルで非同期/待機を使用するにはどうすればよいですか?
私は以上続けられているasync/ awaitしていくつかの記事の上に行くの後、私は自分自身のテストの事に決めました。しかし、なぜこれが機能しないのか頭を抱えているようには見えません。 async function main() { var value = await Promise.resolve('Hey there'); console.log('inside: ' + value); return value; } var text = main(); console.log('outside: ' + text); コンソールは以下を出力します(ノードv8.6.0): &gt;外部:[オブジェクトの約束] &gt;内側:こんにちは 関数内のログメッセージが後で実行されるのはなぜですか?async/ awaitが作成された理由は、非同期タスクを使用して同期実行を行うためだと思いました。 .then()after を使用せずに関数内で返された値を使用できる方法はありmain()ますか?

9
Parallel.ForEachでの入れ子の待機
Metroアプリでは、いくつかのWCF呼び出しを実行する必要があります。実行される呼び出しの数は非常に多いので、並列ループで実行する必要があります。問題は、WCF呼び出しがすべて完了する前に並列ループが終了することです。 これをどのようにリファクタリングして期待どおりに機能させることができますか? var ids = new List&lt;string&gt;() { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" }; var customers = new System.Collections.Concurrent.BlockingCollection&lt;Customer&gt;(); Parallel.ForEach(ids, async i =&gt; { ICustomerRepo repo = new CustomerRepo(); var cust = await repo.GetCustomer(i); customers.Add(cust); }); foreach ( var customer in customers ) { Console.WriteLine(customer.ID); …


3
Node.js UnhandledPromiseRejectionWarningで処理されていないプロミスを見つける方法は?
バージョン7のNode.jsには、promiseを処理するための非同期/待機シンタックスシュガーがあり、私のコードでは次の警告が頻繁に表示されます。 (node:11057) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): ReferenceError: Error: Can't set headers after they are sent. (node:11057) DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 残念ながら、キャッチが欠落している行への参照はありません。すべてのtry / catchブロックをチェックせずにそれを見つける方法はありますか?


5
Array.mapで非同期待機を使用する
次のコードがあるとします: var arr = [1,2,3,4,5]; var results: number[] = await arr.map(async (item): Promise&lt;number&gt; =&gt; { await callAsynchronousOperation(item); return item + 1; }); 次のエラーが発生します。 TS2322:タイプ 'Promise &lt;number&gt; []'はタイプ 'number []'に割り当てることができません。タイプ 'Promise &lt;number&gt;はタイプ' number 'に割り当てることができません。 どうすれば修正できますか?一緒に作っasync awaitてArray.map一緒に作業するにはどうすればよいですか?

14
Async / Awaitクラスコンストラクタ
現時点ではasync/await、クラスコンストラクター関数内で使用しようとしています。これは、現在e-mail取り組んでいるElectronプロジェクトのカスタムタグを取得できるようにするためです。 customElements.define('e-mail', class extends HTMLElement { async constructor() { super() let uid = this.getAttribute('data-uid') let message = await grabUID(uid) const shadowRoot = this.attachShadow({mode: 'open'}) shadowRoot.innerHTML = ` &lt;div id="email"&gt;A random email message has appeared. ${message}&lt;/div&gt; ` } }) ただし、現時点ではプロジェクトは機能せず、次のエラーが発生します。 Class constructor may not be an async method これを回避する方法はありますか?これで非同期/待機を使用できますか?コールバックまたは.then()を要求する代わりに?

4
非同期/待機とBackgroundWorker
過去数日間、.net 4.5とc#5の新機能をテストしました。 新しい非同期/待機機能が気に入っています。以前、BackgroundWorkerを使用して、応答性の高いUIでバックグラウンドでより長いプロセスを処理していました。 私の質問は次のとおりです。これらの素晴らしい新機能を使用した後、いつasync / awaitを使用する必要があり、いつBackgroundWorkerを使用しますか?両方に共通するシナリオはどれですか?

4
Parallel.ForEachとTask.RunおよびTask.WhenAll
Parallel.ForEachまたはTask.Run()を使用して一連のタスクを非同期で開始する場合の違いは何ですか? バージョン1: List&lt;string&gt; strings = new List&lt;string&gt; { "s1", "s2", "s3" }; Parallel.ForEach(strings, s =&gt; { DoSomething(s); }); バージョン2: List&lt;string&gt; strings = new List&lt;string&gt; { "s1", "s2", "s3" }; List&lt;Task&gt; Tasks = new List&lt;Task&gt;(); foreach (var s in strings) { Tasks.Add(Task.Run(() =&gt; DoSomething(s))); } await Task.WhenAll(Tasks);

8
「警告CS4014:この呼び出しが待機されていないため、現在のメソッドの実行が継続しています...」の抑制
これは、「待機せずにC#で非同期メソッドを安全に呼び出す方法」の複製ではありません。 次の警告を適切に抑制するにはどうすればよいですか? 警告CS4014:この呼び出しは待機されていないため、現在のメソッドの実行は、呼び出しが完了する前に続行されます。呼び出しの結果に「待機」演算子を適用することを検討してください。 簡単な例: static async Task WorkAsync() { await Task.Delay(1000); Console.WriteLine("Done!"); } static async Task StartWorkAsync() { WorkAsync(); // I want fire-and-forget // more unrelated async/await stuff here, e.g.: // ... await Task.Delay(2000); } 私が試したが好きではなかったもの: static async Task StartWorkAsync() { #pragma warning disable 4014 WorkAsync(); // I want fire-and-forget …
156 c#  async-await 

8
別の非同期メソッドの代わりにイベントを待つことは可能ですか?
私のC#/ XAML Metroアプリには、長時間実行プロセスを開始するボタンがあります。したがって、推奨されるように、UIスレッドがブロックされないようにするためにasync / awaitを使用しています。 private async void Button_Click_1(object sender, RoutedEventArgs e) { await GetResults(); } private async Task GetResults() { // Do lot of complex stuff that takes a long time // (e.g. contact some web services) ... } 場合によっては、GetResults内で発生する処理が続行する前に、追加のユーザー入力が必要になります。簡単にするために、ユーザーが「続行」ボタンをクリックする必要があるとしましょう。 私の質問は、別のボタンのクリックなどのイベントを待機するようにGetResultsの実行を一時停止するにはどうすればよいですか? ここに私が探しているものを達成するための醜い方法があります:続行するためのイベントハンドラー」ボタンはフラグを設定します... private bool _continue = false; private void …

2
Task.Start()、Task.Run()、Task.Factory.StartNew()の使用について
同じ仕事をするTPLの使用に関する3つのルーチンを見たところです。ここにコードがあります: public static void Main() { Thread.CurrentThread.Name = "Main"; // Create a task and supply a user delegate by using a lambda expression. Task taskA = new Task( () =&gt; Console.WriteLine("Hello from taskA.")); // Start the task. taskA.Start(); // Output a message from the calling thread. Console.WriteLine("Hello from thread '{0}'.", …

6
Process.Startに相当する非同期はありますか?
タイトルが示唆するように、Process.Start私が待つことができる同等のものはありますか(別のアプリケーションまたはバッチファイルを実行できます)? 私は小さなコンソールアプリで遊んでいますが、これは非同期を使用して待つのに最適な場所のように見えましたが、このシナリオのドキュメントが見つかりません。 私が考えているのはこれらの線に沿ったものです: void async RunCommand() { var result = await Process.RunAsync("command to run"); }
141 c#  async-await  c#-5.0 

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