最初の呼び出しの結果を待っている非同期メソッドにさまざまな呼び出しを行う方法は?

StackOverflower

サーバーからデータを取得するメソッドがあるとしましょう

Task<Result> GetDataFromServerAsync(...)

進行中の呼び出しがある場合、サーバーへの新しい要求を開始したくありませんが、元の要求が終了するのを待ちます。

私が持っているとしましょう

var result = await objet.GetDataFromServerAsync(...);

ほぼ同時に呼び出された別の場所で、2回目の呼び出しがあります

var result2 = await objet.GetDataFromServerAsync(...);

最初のリクエストが終了しなかった場合、2番目のリクエストでサーバーへの新しいリクエストを開始したくありません。最初の通話が終了するとすぐに、両方の通話で同じ結果が得られるようにしたいと思います。これは概念実証です。オプションはありますが、これを行うのがいかに簡単かを知りたかったのです。

スチュアート

以下を使用した簡単な例を次に示しLazy<Task<T>>ます。

var lazyGetDataFromServer = new Lazy<Task<Result>>
    (() => objet.GetDataFromServerAsync(...));

var result  = await lazyGetDataFromServer.Value;
var result2 = await lazyGetDataFromServer.Value;

これらの2つがスレッドセーフのようにawait別々のスレッドから実行されるかどうかは問題ではないLazy<T>ためresult2、2番目に実行され場合でも待機し、からの同じ出力を使用しresultます。

ここからコードを使用して、これをと呼ばれるクラスにまとめAsyncLazy<T>、カスタムを追加して実行する必要なしにGetAwaiterそれを実行できるようにすることができawaitます.Value。非常に整頓されています=)

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

別のメソッドが呼び出されるのを待ってから、結果を続行します

分類Dev

ビルドメソッドが呼び出される前に、非同期メソッドの完了を待ってデータをロードする方法は?

分類Dev

非同期呼び出しメソッドの結果に変数を渡します

分類Dev

非同期関数呼び出しが完了するのを待っています

分類Dev

Ajaxのような非同期呼び出しを呼び出している間、コードを待機させる方法

分類Dev

Webfluxの別の非同期メソッド内で非同期呼び出しを行う方法は?

分類Dev

メソッドの非同期呼び出しとAPI呼び出しの完了を待つ方法

分類Dev

メソッドの呼び出し元が結果を C++ に保存しないようにする方法

分類Dev

内部呼び出しが自然に非同期ではない場合、どうすれば自然に非同期のメソッドを作成できますか?

分類Dev

非同期で実行中のメソッドが再度呼び出され、以前の呼び出し結果が廃止された場合に、メソッドを適切にキャンセルする方法

分類Dev

非同期呼び出しの結果を取得する方法は?

分類Dev

2つの呼び出しメソッドと最初の呼び出し結果のみがC#に保存されています

分類Dev

フォームを送信する前に、非同期呼び出しが終了するのを待っています

分類Dev

すべての非同期呼び出しはJavaで完了するのをどのようにして待っていますか?

分類Dev

続行する前に、複数の非同期呼び出しが完了するのを待機しています

分類Dev

AsyncIO。1000個のメソッドを非同期で呼び出し、準備ができたらすぐに非同期の結果を取得する方法

分類Dev

前の呼び出しが完了しないまでFutureを返すメソッドが呼び出されないようにする方法

分類Dev

非同期メソッドは、呼び出し時または待機時に例外をスローしますか?

分類Dev

待機していない非同期メソッド呼び出しを見つける

分類Dev

待機していない非同期メソッド呼び出しを見つける

分類Dev

待機していない非同期メソッド呼び出しを見つける

分類Dev

C#からF#非同期メソッドを呼び出して待機しています

分類Dev

次に、setStateが終了するのを待ってから、次のメソッドを呼び出しますか?

分類Dev

角度4のメソッド呼び出しを伴う非同期パイプは無限に呼び出します

分類Dev

ReactRedux-次のアクションがディスパッチされる前に非同期API呼び出しが終了するのを待っています

分類Dev

どの非同期呼び出しが最初に返されるかに応じて関数を実行します

分類Dev

asyncメソッドの最後の非同期呼び出しは待機する必要がありますか?

分類Dev

Jest:componentDidMountで.thenの非同期メソッドが呼び出されるのを待ちます

分類Dev

nodejsで別のメソッドを呼び出す前に、n個の非同期関数を実行します

Related 関連記事

  1. 1

    別のメソッドが呼び出されるのを待ってから、結果を続行します

  2. 2

    ビルドメソッドが呼び出される前に、非同期メソッドの完了を待ってデータをロードする方法は?

  3. 3

    非同期呼び出しメソッドの結果に変数を渡します

  4. 4

    非同期関数呼び出しが完了するのを待っています

  5. 5

    Ajaxのような非同期呼び出しを呼び出している間、コードを待機させる方法

  6. 6

    Webfluxの別の非同期メソッド内で非同期呼び出しを行う方法は?

  7. 7

    メソッドの非同期呼び出しとAPI呼び出しの完了を待つ方法

  8. 8

    メソッドの呼び出し元が結果を C++ に保存しないようにする方法

  9. 9

    内部呼び出しが自然に非同期ではない場合、どうすれば自然に非同期のメソッドを作成できますか?

  10. 10

    非同期で実行中のメソッドが再度呼び出され、以前の呼び出し結果が廃止された場合に、メソッドを適切にキャンセルする方法

  11. 11

    非同期呼び出しの結果を取得する方法は?

  12. 12

    2つの呼び出しメソッドと最初の呼び出し結果のみがC#に保存されています

  13. 13

    フォームを送信する前に、非同期呼び出しが終了するのを待っています

  14. 14

    すべての非同期呼び出しはJavaで完了するのをどのようにして待っていますか?

  15. 15

    続行する前に、複数の非同期呼び出しが完了するのを待機しています

  16. 16

    AsyncIO。1000個のメソッドを非同期で呼び出し、準備ができたらすぐに非同期の結果を取得する方法

  17. 17

    前の呼び出しが完了しないまでFutureを返すメソッドが呼び出されないようにする方法

  18. 18

    非同期メソッドは、呼び出し時または待機時に例外をスローしますか?

  19. 19

    待機していない非同期メソッド呼び出しを見つける

  20. 20

    待機していない非同期メソッド呼び出しを見つける

  21. 21

    待機していない非同期メソッド呼び出しを見つける

  22. 22

    C#からF#非同期メソッドを呼び出して待機しています

  23. 23

    次に、setStateが終了するのを待ってから、次のメソッドを呼び出しますか?

  24. 24

    角度4のメソッド呼び出しを伴う非同期パイプは無限に呼び出します

  25. 25

    ReactRedux-次のアクションがディスパッチされる前に非同期API呼び出しが終了するのを待っています

  26. 26

    どの非同期呼び出しが最初に返されるかに応じて関数を実行します

  27. 27

    asyncメソッドの最後の非同期呼び出しは待機する必要がありますか?

  28. 28

    Jest:componentDidMountで.thenの非同期メソッドが呼び出されるのを待ちます

  29. 29

    nodejsで別のメソッドを呼び出す前に、n個の非同期関数を実行します

ホットタグ

アーカイブ