Task <int>はどのようにしてintになりますか?

フリーマン

この方法があります:

async Task<int> AccessTheWebAsync()
{ 
    HttpClient client = new HttpClient();

   Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");

   // You can do work here that doesn't rely on the string from GetStringAsync.
   DoIndependentWork();

   string urlContents = await getStringTask;
   //The thing is that this returns an int to a method that has a return type of Task<int>
   return urlContents.Length;
}

Task<int>との間で暗黙の変換が発生intますか?そうでない場合、何が起こっているのでしょうか?それはどのように機能するように実装されていますか?

ジョンスキート

Task <>とintの間で暗黙の変換が発生しますか?

いいえ。これはasync/のawait仕組みの一部にすぎません

として宣言されたメソッドasyncは、次の戻り値の型を持っいる必要があります。

  • void (可能であれば避けてください)
  • Task (完了/失敗の通知以外の結果はありません)
  • Task<T>T非同期方式の型の論理結果の場合

コンパイラはすべての適切なラッピングを行います。重要なのは、非同期で戻っているということです。実際のメソッドは、まだ完了していない最初のにヒットしたときに返されるurlContents.Lengthため、メソッドを単に返すようにすることはできませんしたがって、代わりに、asyncメソッド自体が完了すると完了するa返しますintawaitTask<int>

await逆のことをすることに注意しください-それはa値にアンラップTask<T>Tます、それはこの行がどのように機能するかです:

string urlContents = await getStringTask;

...しかしもちろん、非同期でアンラップしますが、使用Resultするだけでタスクが完了するまでブロックされます。await待機可能なパターンを実装する他のタイプをアンラップTask<T>できますが、最も頻繁に使用する可能性が高いタイプです。)

この二重のラッピング/アンラッピングにより、非同期を非常に構成可能にすることができます。たとえば、あなたを呼び出して結果を2倍にする別の非同期メソッドを作成できます。

public async Task<int> AccessTheWebAndDoubleAsync()
{
    var task = AccessTheWebAsync();
    int result = await task;
    return result * 2;
}

(または単にreturn await AccessTheWebAsync() * 2;もちろんです。)

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

int(* ptr)[4]は実際には何を意味し、* ptrとどのように異なりますか?

分類Dev

ScalaはどのようにしてIntをDoubleに変換しますか?

分類Dev

IntはどのようにしてBigDecimalに変換されますか?

分類Dev

なぜintではなくTask <int>を返すのですか?(非同期&待機)

分類Dev

(int)ケースはどのように機能しますか?

分類Dev

int(* p)[10]はどのように機能しますか?

分類Dev

int *&variableNameはどのように機能しますか?

分類Dev

演算子*をオペランドintおよびTask <int>に適用することはできません

分類Dev

ラムダ型をint => IEnumerable <string >>からint => Task <IEnumerable <string >>>に変換しますか?

分類Dev

フラグから、(* int)の代わりに(int)をどのように返しますか?

分類Dev

なぜ(1)はintであり、どのように機能するのか

分類Dev

charから文字「0」を引くと、どのようにしてintに変わりますか?

分類Dev

カスタムコンパレータを指定しなくても、pair <int、int>の優先キューはどのように機能しますか?

分類Dev

Xorはどのintが異なるかをどのように判断しますか?

分類Dev

floatのクラス内静的const初期化は、C ++のintとどのように異なりますか?

分類Dev

ActionFilterAttributeはどのようにして保護されたintにアクセスできますか?BaseControllerから?

分類Dev

cの `int(*)(int)`は、型に関してどういう意味ですか?

分類Dev

Pythonはintおよびlongをどのように管理しますか?

分類Dev

Task <int>を返すとUIがフリーズしますか?

分類Dev

intを出力しようとしていますが、次のようになります。TypeErrorはfloatではなくstrである必要があります

分類Dev

変数を引用符で囲む必要があるかどうかは、データベース内のカテゴリがvarcharまたはintとしてマークされているかどうかによって異なりますか?

分類Dev

どのようにintを結合しますか?linqpadのint変数

分類Dev

QFlagsの演算子Int()をどのように使用しますか?

分類Dev

どのような状況で、値はunsigned intに昇格されますか?

分類Dev

新しいint [n]()はどのように機能しますか?

分類Dev

PHPのstrpos()関数はどのようにintとbooleanを返しますか?

分類Dev

intはJavaでどのように実装されていますか?

分類Dev

int検証を実装して、入力がintになり、最小値と最大値の間になるようにするにはどうすればよいですか?

分類Dev

`int a [100] = {1}`はどのように初期化されますか

Related 関連記事

  1. 1

    int(* ptr)[4]は実際には何を意味し、* ptrとどのように異なりますか?

  2. 2

    ScalaはどのようにしてIntをDoubleに変換しますか?

  3. 3

    IntはどのようにしてBigDecimalに変換されますか?

  4. 4

    なぜintではなくTask <int>を返すのですか?(非同期&待機)

  5. 5

    (int)ケースはどのように機能しますか?

  6. 6

    int(* p)[10]はどのように機能しますか?

  7. 7

    int *&variableNameはどのように機能しますか?

  8. 8

    演算子*をオペランドintおよびTask <int>に適用することはできません

  9. 9

    ラムダ型をint => IEnumerable <string >>からint => Task <IEnumerable <string >>>に変換しますか?

  10. 10

    フラグから、(* int)の代わりに(int)をどのように返しますか?

  11. 11

    なぜ(1)はintであり、どのように機能するのか

  12. 12

    charから文字「0」を引くと、どのようにしてintに変わりますか?

  13. 13

    カスタムコンパレータを指定しなくても、pair <int、int>の優先キューはどのように機能しますか?

  14. 14

    Xorはどのintが異なるかをどのように判断しますか?

  15. 15

    floatのクラス内静的const初期化は、C ++のintとどのように異なりますか?

  16. 16

    ActionFilterAttributeはどのようにして保護されたintにアクセスできますか?BaseControllerから?

  17. 17

    cの `int(*)(int)`は、型に関してどういう意味ですか?

  18. 18

    Pythonはintおよびlongをどのように管理しますか?

  19. 19

    Task <int>を返すとUIがフリーズしますか?

  20. 20

    intを出力しようとしていますが、次のようになります。TypeErrorはfloatではなくstrである必要があります

  21. 21

    変数を引用符で囲む必要があるかどうかは、データベース内のカテゴリがvarcharまたはintとしてマークされているかどうかによって異なりますか?

  22. 22

    どのようにintを結合しますか?linqpadのint変数

  23. 23

    QFlagsの演算子Int()をどのように使用しますか?

  24. 24

    どのような状況で、値はunsigned intに昇格されますか?

  25. 25

    新しいint [n]()はどのように機能しますか?

  26. 26

    PHPのstrpos()関数はどのようにintとbooleanを返しますか?

  27. 27

    intはJavaでどのように実装されていますか?

  28. 28

    int検証を実装して、入力がintになり、最小値と最大値の間になるようにするにはどうすればよいですか?

  29. 29

    `int a [100] = {1}`はどのように初期化されますか

ホットタグ

アーカイブ