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]
コメントを追加