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
メソッド宣言の修飾子です。としてマークするとasync
、await
キーワードを使用できます。そのため、asyncはコールスタックを「ずっと」伝播します。1つのasyncメソッドを呼び出してその結果を待つ必要がある場合は、消費メソッドにasync修飾子を付ける必要があります。
メソッドを機能させるには、次のことを行う必要があります。
public async Task GetEmployeesAsync()
{
List<Employees> result = await TestEmployeesGetAsync();
}
補足として、syncメソッドを介して非同期ラッパーを公開しないように注意してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加