非同期メソッドC#のループ内で呼び出されるパラメーターとしてタスクを渡す

テリーT

LINQPadには次のコードがあります。

async Task Main()
{
    await PrintLoop(Print1());
}

async Task Print1()
{
    Debug.WriteLine("Printing!");
}

//Print 2
//Print 3
//etc.

async Task PrintLoop(Task printer, int iterations = 3)
{
    for (int i = 0; i < iterations; i++)
    {
        await printer;
    }
}

次の出力が得られる理由を一生理解できません。

Printing!

「印刷」とは対照的に!x3。

Print1()ループ内で直接呼び出すと、次の出力が得られます。

Printing!
Printing!
Printing!
Printing!

どちらの種類が理にかなっていますが、私がやりたいことではありません。代わりに、Print1(またはとして渡されたメソッドtask)をiterations何度も呼び出すようにします

誰かが私がここで何が起こっているのか理解するのを手伝ってくれる?ありがとう!

ガブリエル・ルシ

呼び出し結果Print1()メソッド(a Task)に渡します。メソッド自体を渡していない。したがって、で1回だけ呼び出されPrint1()ます。あなたがawait printer;、それは本当に「うん、それは起こった」と言って先に進むだけです。

メソッド自体を渡して、内部PrintLoop呼び出すことができるようにする場合は、Func<Task>(を返すメソッドTaskを受け入れる必要があります

そして、あなたは(メソッド自体を渡しPrint1、それを呼び出すことなく)(ありませんPrint1()

async Task Main()
{
    await PrintLoop(Print1); //not Print1()
}

async Task Print1()
{
    Debug.WriteLine("Printing!");
}

async Task PrintLoop(Func<Task> printer, int iterations = 3)
{
    for (int i = 0; i < iterations; i++)
    {
        await printer();
    }
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

C#クラスをパラメーターとしてメソッドに渡し、そこで静的メソッドを呼び出します

分類Dev

beginInvoke で呼び出された非同期メソッドでパラメータ値を取得します

分類Dev

複数のタスクから呼び出されたパラメーターを使用した非同期メソッドが衝突を引き起こす

分類Dev

パラメータとして指定されたC ++クラスメソッドを呼び出す方法は?

分類Dev

C#のループ内でパラメーター化されたメソッドを呼び出すための最良の方法は何ですか

分類Dev

パラメータとしてサブクラスのみを許可するテンプレート化されたメソッドの呼び出し

分類Dev

JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

分類Dev

バックグラウンドワーカー内で非同期のメディエーターデッドロックが待機しています-スレッドがそれ自体を呼び出していることを検出する方法

分類Dev

渡されたパラメータを他のメソッド呼び出しで使用する方法は?

分類Dev

チェックされたラジオボタンのみをパラメータとして渡すメソッド呼び出しを作成します

分類Dev

WPFユーザーコントロールテキストボックスで設定されたパラメーターを使用してc#クラスのメソッドを呼び出す方法

分類Dev

JSTLループ内でパラメーターを使用してメソッドを呼び出す

分類Dev

パラメータ化されたクラスのクラスタイプのメソッドの呼び出しでエラーが発生する

分類Dev

メソッド自体で非同期タスクが進行中の場合、メソッドへのスケジュールされた呼び出しをスキップする方法は?

分類Dev

呼び出し側に影響を与えないメソッドにパラメーターとして渡されるプリミティブ ラッパー クラスのインクリメント

分類Dev

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

分類Dev

メソッドのパラメーターが null の場合、HTML で JavaScript メソッドを呼び出そうとしているので、結果はメソッドの呼び出し元スクリプトです

分類Dev

呼び出されたシェルスクリプトから呼び出し元スクリプトのメソッドのパラメーターにエコーステートメントを渡す方法

分類Dev

タスクキューを介して呼び出されたときにメソッド名とパラメーターを取得する

分類Dev

コンストラクタまたはメソッドを呼び出そうとするときに、「this」が暗黙的にパラメータとして渡されるのはなぜですか?

分類Dev

Javascript:applyメソッドを使用してパラメーターの配列を渡し、呼び出された関数内でそれにアクセスする方法

分類Dev

リフレクションを使用して「プライベート非同期タスク」タイプのメソッドを呼び出す方法

分類Dev

動的メソッドがC#で呼び出すときにStructパラメーターを渡す方法は?

分類Dev

Moq&C#:コールバックが無効です。パラメータを使用したメソッドのセットアップでは、パラメータを使用してコールバックを呼び出すことはできません

分類Dev

phpスクリプトで呼び出されるjavascript関数のパラメーターとしてphp文字列を渡します

分類Dev

別のスレッドで呼び出される関数にパラメータを渡します

分類Dev

コンストラクターでメソッド呼び出しのパラメーターとして 'this'を使用する

分類Dev

コンストラクターで非同期メソッドを呼び出しますか?

分類Dev

パラメータを使用するメソッドとして非同期タスクを使用する方法

Related 関連記事

  1. 1

    C#クラスをパラメーターとしてメソッドに渡し、そこで静的メソッドを呼び出します

  2. 2

    beginInvoke で呼び出された非同期メソッドでパラメータ値を取得します

  3. 3

    複数のタスクから呼び出されたパラメーターを使用した非同期メソッドが衝突を引き起こす

  4. 4

    パラメータとして指定されたC ++クラスメソッドを呼び出す方法は?

  5. 5

    C#のループ内でパラメーター化されたメソッドを呼び出すための最良の方法は何ですか

  6. 6

    パラメータとしてサブクラスのみを許可するテンプレート化されたメソッドの呼び出し

  7. 7

    JUnitテストでメソッドのメソッドパラメータとして渡されるオブジェクトのメソッド呼び出しをモックする方法

  8. 8

    バックグラウンドワーカー内で非同期のメディエーターデッドロックが待機しています-スレッドがそれ自体を呼び出していることを検出する方法

  9. 9

    渡されたパラメータを他のメソッド呼び出しで使用する方法は?

  10. 10

    チェックされたラジオボタンのみをパラメータとして渡すメソッド呼び出しを作成します

  11. 11

    WPFユーザーコントロールテキストボックスで設定されたパラメーターを使用してc#クラスのメソッドを呼び出す方法

  12. 12

    JSTLループ内でパラメーターを使用してメソッドを呼び出す

  13. 13

    パラメータ化されたクラスのクラスタイプのメソッドの呼び出しでエラーが発生する

  14. 14

    メソッド自体で非同期タスクが進行中の場合、メソッドへのスケジュールされた呼び出しをスキップする方法は?

  15. 15

    呼び出し側に影響を与えないメソッドにパラメーターとして渡されるプリミティブ ラッパー クラスのインクリメント

  16. 16

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

  17. 17

    メソッドのパラメーターが null の場合、HTML で JavaScript メソッドを呼び出そうとしているので、結果はメソッドの呼び出し元スクリプトです

  18. 18

    呼び出されたシェルスクリプトから呼び出し元スクリプトのメソッドのパラメーターにエコーステートメントを渡す方法

  19. 19

    タスクキューを介して呼び出されたときにメソッド名とパラメーターを取得する

  20. 20

    コンストラクタまたはメソッドを呼び出そうとするときに、「this」が暗黙的にパラメータとして渡されるのはなぜですか?

  21. 21

    Javascript:applyメソッドを使用してパラメーターの配列を渡し、呼び出された関数内でそれにアクセスする方法

  22. 22

    リフレクションを使用して「プライベート非同期タスク」タイプのメソッドを呼び出す方法

  23. 23

    動的メソッドがC#で呼び出すときにStructパラメーターを渡す方法は?

  24. 24

    Moq&C#:コールバックが無効です。パラメータを使用したメソッドのセットアップでは、パラメータを使用してコールバックを呼び出すことはできません

  25. 25

    phpスクリプトで呼び出されるjavascript関数のパラメーターとしてphp文字列を渡します

  26. 26

    別のスレッドで呼び出される関数にパラメータを渡します

  27. 27

    コンストラクターでメソッド呼び出しのパラメーターとして 'this'を使用する

  28. 28

    コンストラクターで非同期メソッドを呼び出しますか?

  29. 29

    パラメータを使用するメソッドとして非同期タスクを使用する方法

ホットタグ

アーカイブ