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

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

20
forEachループでasync / awaitを使用する
使用に問題があるasync/のawait中にforEachループが?私は、ファイルの配列awaitと各ファイルのコンテンツをループしようとしています。 import fs from 'fs-promise' async function printFiles () { const files = await getFilePaths() // Assume this works fine files.forEach(async (file) => { const contents = await fs.readFile(file, 'utf8') console.log(contents) }) } printFiles() このコードは機能しますが、何か問題が発生する可能性がありますか?このようなより高次の関数ではasync/ を使用するべきではないと誰かに言わawaitれたので、これに問題があるかどうか尋ねたかっただけです。

21
「async」と「await」をいつどのように使用するか
ことを主な事柄の私の理解1からasyncとawait書きやすいコードを作成し、読みすることです-しかし、それらを使用している長時間のロジックを実行するためにバックグラウンドスレッドを産卵に等しいですか? 現在、最も基本的な例を試しています。インラインでコメントを追加しました。はっきりさせてくれませんか? // I don't understand why this method must be marked as `async`. private async void button1_Click(object sender, EventArgs e) { Task<int> access = DoSomethingAsync(); // task independent stuff here // this line is reached after the 5 seconds sleep from // DoSomethingAsync() method. Shouldn't it be reached immediately? …

16
C#で同期メソッドから非同期メソッドを呼び出す方法は?
私が持っているpublic async void Foo()私は、同期メソッドから呼び出したいというメソッドを。これまでのところ、MSDNドキュメントから見たのは、非同期メソッドを介して非同期メソッドを呼び出すことだけですが、プログラム全体が非同期メソッドで構築されていません。 これは可能ですか? 以下は、非同期メソッドからこれらのメソッドを呼び出す1つの例です。http://msdn.microsoft.com/en-us/library/hh300224(v = vs.110).aspx 今、私はこれらの非同期メソッドを同期メソッドから呼び出すことを検討しています。
863 c#  async-await 

24
非同期のTask <T>メソッドを同期的に実行するにはどうすればよいですか?
私は非同期/待機について学習していて、非同期メソッドを同期的に呼び出す必要がある状況に出くわしました。どうやってやるの? 非同期メソッド: public async Task&lt;Customers&gt; GetCustomers() { return await Service.GetCustomersAsync(); } 通常の使用法: public async void GetCustomers() { customerList = await GetCustomers(); } 私は以下を使ってみました: Task&lt;Customer&gt; task = GetCustomers(); task.Wait() Task&lt;Customer&gt; task = GetCustomers(); task.RunSynchronously(); Task&lt;Customer&gt; task = GetCustomers(); while(task.Status != TaskStatus.RanToCompletion) ここからも提案を試みましたが、ディスパッチャーが一時停止状態の場合は機能しません。 public static void WaitWithPumping(this Task task) { if (task …

4
すべてのサーバー側コードに対してConfigureAwaitを呼び出すベストプラクティス
サーバー側コード(つまり一部ApiController)があり、関数が非同期であるため(それらが返さTask&lt;SomeObject&gt;れる場合)、呼び出す関数を待機するときは常にベストプラクティスと見なされますConfigureAwait(false)か? スレッドコンテキストを元のスレッドコンテキストに戻す必要がないため、パフォーマンスが向上することを読みました。ただし、ASP.NET Web Apiでは、リクエストが1つのスレッドで受信され、関数ConfigureAwait(false)の最終結果を返すときに別のスレッドに入る可能性がある関数と呼び出しを待機している場合ApiController。 私が話していることの例を以下に入力しました: public class CustomerController : ApiController { public async Task&lt;Customer&gt; Get(int id) { // you are on a particular thread here var customer = await SomeAsyncFunctionThatGetsCustomer(id).ConfigureAwait(false); // now you are on a different thread! will that cause problems? return customer; } }


9
インターフェイスがタスクを返さなければならない場合、操作なしの実装を行うための最良の方法は何ですか?
以下のコードでは、インターフェースのため、クラスLazyBarはそのメソッドからタスクを返す必要があります(引数のために変更することはできません)。もしLazyBarそれが迅速かつ同期的に実行するために起こるものでの実装は珍しいです-メソッドから無操作のタスクを返すための最良の方法は何ですか? 私はTask.Delay(0)以下に行きましたが、関数がたくさん呼び出された場合(引数のために、毎秒数百回と言う)、これがパフォーマンスの副作用を持っているかどうか知りたいです: この構文糖は何か大きなものに巻き戻されますか? アプリケーションのスレッドプールが詰まり始めますか? コンパイラクリーバーはDelay(0)別の方法で処理するのに十分ですか? うreturn Task.Run(() =&gt; { });任意の異なること? もっと良い方法はありますか? using System.Threading.Tasks; namespace MyAsyncTest { internal interface IFooFace { Task WillBeLongRunningAsyncInTheMajorityOfImplementations(); } /// &lt;summary&gt; /// An implementation, that unlike most cases, will not have a long-running /// operation in 'WillBeLongRunningAsyncInTheMajorityOfImplementations' /// &lt;/summary&gt; internal class LazyBar : IFooFace { #region …

5
複数のタスクにasync / awaitを使用する
私は、それぞれの操作を返すのいずれかで完全にasynchrounousあるAPIクライアント、使用しているTaskかTask&lt;T&gt;、例えば: static async Task DoSomething(int siteId, int postId, IBlogClient client) { await client.DeletePost(siteId, postId); // call API client Console.WriteLine("Deleted post {0}.", siteId); } C#5のasync / awaitオペレーターを使用して、複数のタスクを開始し、すべてが完了するのを待つための正しい/最も効率的な方法は何ですか? int[] ids = new[] { 1, 2, 3, 4, 5 }; Parallel.ForEach(ids, i =&gt; DoSomething(1, i, blogClient).Wait()); または: int[] ids = new[] { 1, …

8
ロックステートメントの本文内で 'await'演算子を使用できないのはなぜですか?
C#のawaitキーワード(.NET Async CTP)は、lockステートメント内からは使用できません。 MSDNから: await式は、同期関数、クエリ式、例外処理ステートメントのcatchまたはfinallyブロック、lockステートメントのブロック、または安全でないコンテキストでは使用できません。 これは、コンパイラチームが何らかの理由で実装するのが困難または不可能であると思います。 私はusingステートメントで回避策を試みました: class Async { public static async Task&lt;IDisposable&gt; Lock(object obj) { while (!Monitor.TryEnter(obj)) await TaskEx.Yield(); return new ExitDisposable(obj); } private class ExitDisposable : IDisposable { private readonly object obj; public ExitDisposable(object obj) { this.obj = obj; } public void Dispose() { Monitor.Exit(this.obj); } } …
348 c#  .net  async-await 


6
Task.Resultは.GetAwaiter.GetResult()と同じですか?
最近、多くの非同期メソッドを使用するコードを読んでいましたが、それらを同期的に実行する必要がある場合があります。コードは: Foo foo = GetFooAsync(...).GetAwaiter().GetResult(); これは同じですか Foo foo = GetFooAsync(...).Result;
328 c#  async-await 

11
待機せずにC#で非同期メソッドを安全に呼び出す方法
私が持っているasyncデータを返さないメソッドを: public async Task MyAsyncMethod() { // do some stuff async, don't return any data } データを返す別のメソッドからこれを呼び出しています: public string GetStringData() { MyAsyncMethod(); // this generates a warning and swallows exceptions return "hello world"; } 待機MyAsyncMethod()せずに呼び出すと、Visual Studioで「この呼び出しは待機されないため、現在のメソッドは呼び出しが完了する前に引き続き実行されます」という警告が表示されます。その警告のページには、次のように記載されています。 非同期呼び出しの完了を待たず、呼び出されたメソッドが例外を発生させないことが確実な場合にのみ、警告を抑制することを検討する必要があります。 通話が完了するのを待ちたくないと思います。する必要も時間もありません。しかし、呼び出しがあります例外を発生させます。 私はこの問題に何度か遭遇しましたが、それは共通の解決策が必要な共通の問題であると確信しています。 結果を待たずに非同期メソッドを安全に呼び出すにはどうすればよいですか? 更新: 私が結果を待つことを示唆している人々のために、これは私たちのWebサービス(ASP.NET Web API)上のWebリクエストに応答しているコードです。UIコンテキストで待機すると、UIスレッドは解放されたままになりますが、Web要求の呼び出しで待機すると、要求に応答する前にタスクが完了するのを待機するため、理由もなく応答時間が長くなります。

4
非同期操作を同期的に待機し、Wait()がプログラムをここでフリーズする理由
序文:単なる解決策ではなく、説明を求めています。私はすでに解決策を知っています。 タスクベースの非同期パターン(TAP)、非同期、待機に関するMSDNの記事の調査に数日費やしましたが、細かい詳細についてはまだ混乱しています。 私はWindowsストアアプリ用のロガーを書いており、非同期と同期の両方のロギングをサポートしたいと考えています。非同期メソッドはTAPに従い、同期メソッドはこれをすべて隠す必要があり、通常のメソッドのように見え、機能します。 これは、非同期ロギングのコアメソッドです。 private async Task WriteToLogAsync(string text) { StorageFolder folder = ApplicationData.Current.LocalFolder; StorageFile file = await folder.CreateFileAsync("log.log", CreationCollisionOption.OpenIfExists); await FileIO.AppendTextAsync(file, text, Windows.Storage.Streams.UnicodeEncoding.Utf8); } 今、対応する同期メソッド... バージョン1: private void WriteToLog(string text) { Task task = WriteToLogAsync(text); task.Wait(); } これは正しいように見えますが、機能しません。プログラム全体が永久にフリーズします。 バージョン2: うーん..タスクが開始されなかったのでしょうか? private void WriteToLog(string text) { Task task = WriteToLogAsync(text); …

2
Task.Runを正しく使用し、async-awaitを使用する場合
使用する際の正しいアーキテクチャーについて、ご意見をお聞かせくださいTask.Run。WPF .NET 4.5アプリケーション(Caliburn Microフレームワークを使用)でUIが遅くなっています。 基本的に私はやっています(非常に単純化されたコードスニペット): public class PageViewModel : IHandle&lt;SomeMessage&gt; { ... public async void Handle(SomeMessage message) { ShowLoadingAnimation(); // Makes UI very laggy, but still not dead await this.contentLoader.LoadContentAsync(); HideLoadingAnimation(); } } public class ContentLoader { public async Task LoadContentAsync() { await DoCpuBoundWorkAsync(); await DoIoBoundWorkAsync(); await DoCpuBoundWorkAsync(); // I …

6
await / asyncを使用すると、HttpClient.GetAsync(…)が返されない
編集: この質問は同じ問題のようですが、回答がありません... 編集:テストケース5では、タスクが停止したように見えますWaitingForActivation。 .NET 4.5でSystem.Net.Http.HttpClientを使用していくつかの奇妙な動作に遭遇しました-(たとえば)への呼び出しの結果を「待機」することhttpClient.GetAsync(...)は決して戻りません。 これは、新しいasync / await言語機能とTasks APIを使用する特定の状況でのみ発生します。継続のみを使用する場合、コードは常に機能するようです。 これが問題を再現するコードです。これをVisual Studio 11の新しい「MVC 4 WebApiプロジェクト」にドロップして、次のGETエンドポイントを公開します。 /api/test1 /api/test2 /api/test3 /api/test4 /api/test5 &lt;--- never completes /api/test6 ここの各エンドポイントは、/api/test5決して完了しないことを除いて、同じデータ(stackoverflow.comからの応答ヘッダー)を返します。 HttpClientクラスでバグが発生したか、または何らかの方法でAPIを誤用していますか? 再現するコード: public class BaseApiController : ApiController { /// &lt;summary&gt; /// Retrieves data using continuations /// &lt;/summary&gt; protected Task&lt;string&gt; Continuations_GetSomeDataAsync() { var httpClient = new HttpClient(); …

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