ayncメソッドの呼び出し時にList <T>ではなくTask <List <T >>を返すasyncawait

Ehsan Sajjad

async awaitの使用法を理解しようとしていますが、いくつかのブログ投稿を調べて、テストコードを作成しましたが、期待どおりに機能していません。

Listを返すメソッドがあります:

private List<Employee> GetEmployees()
{

 IList<Employee> list = new List<Employee>();
 list.Add(new Employee() { Id = 1, Age = 20, Name = "Kavin" });
 list.Add(new Employee() { Id = 2, Age = 30, Name = "Alen" });
 list.Add(new Employee() { Id = 3, Age = 20, Name = "Suresh" });
 list.Add(new Employee() { Id = 4, Age = 30, Name = "Jay" });
 list.Add(new Employee() { Id = 5, Age = 20, Name = "Nanda" });
 list.Add(new Employee() { Id = 5, Age = 20, Name = "Kavin" });
 list.Add(new Employee() { Id = 5, Age = 20, Name = "Kavin" });
 list.Add(new Employee() { Id = 1, Age = 23, Name = "Test" });

 return list;
}

それから私は私の非同期メソッドを書きました:

private async Task<List<Employee>> TestEmployeesGetAsync()
{

  var result = await Task.Run(() => GetEmployees());

  return result;
}

このメソッドを呼び出すと:

var Result = TestEmployeesGetAsync();

Visual Studioは、それが戻ってきてTask<List<T>>、その使用法は次のようになっていると言っています

List<Employee> result = await TestEmployeesGetAsync();

もちろん、非同期も必要なため、呼び出し元のメソッドを待機する必要があるのはawait、もちろんコンパイラエラーが発生するためawaitです。誰かが私の心をクリアして、List<T>代わりに取得できるようにする方法を教えてもらえますか?Task<List<T>>

ユヴァル・イチャコフ

awaitにも非同期が必要なため、awaitを指定した場合に、呼び出し元のメソッドをawaitする必要があるのは、もちろんコンパイラエラーです。

非同期メソッドを実行していることを理解するためにコンパイラーが必要とするいくつかの依存関係があります。シグナルは、asyncメソッド宣言の修飾子です。としてマークするとasyncawaitキーワードを使用できますそのため、asyncはコールスタックを「ずっと」伝播します。1つのasyncメソッドを呼び出してその結果を待つ必要がある場合は、消費メソッドにasync修飾子を付ける必要があります。

メソッドを機能させるには、次のことを行う必要があります。

public async Task GetEmployeesAsync()
{
   List<Employees> result = await TestEmployeesGetAsync();
}

補足として、syncメソッドを介して非同期ラッパーを公開しないように注意してください

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

Task <T>ではなくTaskのみを返すメソッドから何を返しますか?

分類Dev

List <T>を受け取るC#ジェネリックメソッドは、実際のタイプのTに対してオーバーロードされたメソッドを呼び出しません(ジェネリックメソッドを優先します)

分類Dev

Task <T>のContinueWithメソッドを呼び出す(直接呼び出さない)方法は?

分類Dev

Task <T>メソッドを一般的に呼び出す

分類Dev

汎用List <T:Enum>用のMoshiカスタムアダプタは、List <T:Enum>ではなくList <List <T:Enum >>を返します

分類Dev

List <T>を返すメソッドをモックする方法は?

分類Dev

List <String>をList <T>に変換するjavaメソッド。Tは整数または長整数にできます。

分類Dev

静的メソッドでList <T>をIEnumerable <T>に割り当てます

分類Dev

ScalaでList [Try [T]]をTry [List [T]]に

分類Dev

ActionResult <IEnumerable <T >>はList <T>を返す必要があります

分類Dev

DbSet <T>でLINQ拡張メソッドを使用する場合のあいまいな呼び出し

分類Dev

IList <T>を返すことは、T []またはList <T>を返すことよりも悪いですか?

分類Dev

ジェネリックメソッド<T>()からジェネリックList<T>を返すにはどうすればよいですか

分類Dev

class <T>のタイプTのメンバー変数で拡張メソッドを呼び出す

分類Dev

List <T> .AddRangeメソッドを一般的なメソッドにすると、パフォーマンスが低下するのはなぜですか?

分類Dev

タスク状態への参照ではなく、値でList <T>を渡す

分類Dev

Task <T> .Resultデッドロックを呼び出さないのはなぜですか?

分類Dev

ジェネリッククラスの静的メソッド呼び出しで<T>を使用する必要があるのはなぜですか

分類Dev

多多/多多の関係でIEnumerableまたはList <T>ではなくICollectionを使用するのはなぜですか?

分類Dev

List <T>内のLINQMultiple Group Byは、List <T>に変換します

分類Dev

異なるTクラスでprint(List <T> a、T b)を呼び出すとエラーが発生する

分類Dev

void、Task、またはTask <T>を返さないメソッドで何かを待つ適切な方法は?

分類Dev

Nullable <T?>を使用してメソッドを呼び出す方法

分類Dev

ASP.Net MVC4コントローラーメソッドからTask <T>を返すメソッドを呼び出すにはどうすればよいですか?

分類Dev

Class <T>の引数を使用してメソッドを呼び出す(Tはパラメーター化された型)

分類Dev

Nullable <T>のnull伝播がNullable <T>ではなくTを返すのはなぜですか?

分類Dev

メソッドとフォームの間でデータを渡す(List <t>)

分類Dev

EnumMap <T> .keySet()がEnumSet <T>()ではなくSet <T>()を返すのはなぜですか?

分類Dev

List <T>へのチェックされていない呼び出し

Related 関連記事

  1. 1

    Task <T>ではなくTaskのみを返すメソッドから何を返しますか?

  2. 2

    List <T>を受け取るC#ジェネリックメソッドは、実際のタイプのTに対してオーバーロードされたメソッドを呼び出しません(ジェネリックメソッドを優先します)

  3. 3

    Task <T>のContinueWithメソッドを呼び出す(直接呼び出さない)方法は?

  4. 4

    Task <T>メソッドを一般的に呼び出す

  5. 5

    汎用List <T:Enum>用のMoshiカスタムアダプタは、List <T:Enum>ではなくList <List <T:Enum >>を返します

  6. 6

    List <T>を返すメソッドをモックする方法は?

  7. 7

    List <String>をList <T>に変換するjavaメソッド。Tは整数または長整数にできます。

  8. 8

    静的メソッドでList <T>をIEnumerable <T>に割り当てます

  9. 9

    ScalaでList [Try [T]]をTry [List [T]]に

  10. 10

    ActionResult <IEnumerable <T >>はList <T>を返す必要があります

  11. 11

    DbSet <T>でLINQ拡張メソッドを使用する場合のあいまいな呼び出し

  12. 12

    IList <T>を返すことは、T []またはList <T>を返すことよりも悪いですか?

  13. 13

    ジェネリックメソッド<T>()からジェネリックList<T>を返すにはどうすればよいですか

  14. 14

    class <T>のタイプTのメンバー変数で拡張メソッドを呼び出す

  15. 15

    List <T> .AddRangeメソッドを一般的なメソッドにすると、パフォーマンスが低下するのはなぜですか?

  16. 16

    タスク状態への参照ではなく、値でList <T>を渡す

  17. 17

    Task <T> .Resultデッドロックを呼び出さないのはなぜですか?

  18. 18

    ジェネリッククラスの静的メソッド呼び出しで<T>を使用する必要があるのはなぜですか

  19. 19

    多多/多多の関係でIEnumerableまたはList <T>ではなくICollectionを使用するのはなぜですか?

  20. 20

    List <T>内のLINQMultiple Group Byは、List <T>に変換します

  21. 21

    異なるTクラスでprint(List <T> a、T b)を呼び出すとエラーが発生する

  22. 22

    void、Task、またはTask <T>を返さないメソッドで何かを待つ適切な方法は?

  23. 23

    Nullable <T?>を使用してメソッドを呼び出す方法

  24. 24

    ASP.Net MVC4コントローラーメソッドからTask <T>を返すメソッドを呼び出すにはどうすればよいですか?

  25. 25

    Class <T>の引数を使用してメソッドを呼び出す(Tはパラメーター化された型)

  26. 26

    Nullable <T>のnull伝播がNullable <T>ではなくTを返すのはなぜですか?

  27. 27

    メソッドとフォームの間でデータを渡す(List <t>)

  28. 28

    EnumMap <T> .keySet()がEnumSet <T>()ではなくSet <T>()を返すのはなぜですか?

  29. 29

    List <T>へのチェックされていない呼び出し

ホットタグ

アーカイブ