2016-03-22 8 views
0

私はリストを返す静的メソッドを持っています。しかし、私はその方法の中で待っていたい。リストを返すメソッドを待つ方法は?

public static List<ContactModel> CreateSampleData() 
    { 
     var data = new List<ContactModel>(); 
     StorageFolder musiclibrary = KnownFolders.MusicLibrary; 
     artists = (await musiclibrary.GetFoldersAsync(CommonFolderQuery.GroupByAlbumArtist)).ToList(); 


     for (var i = 0; i < artists.Count; i++) 
     { 
      try 
      { 

       data.Add(new ContactModel(artists[i].Name)); 

      } 
      catch { } 
     } 

     return data; 

    } 

私はそれが

public static async Task<List<ContactModel>> CreateSampleData(){//method contents} 

作るとき私はあなたがあなたの非同期メソッドを待つ必要があり、このコード

Error: Task<List<ContactModel>> doesnt contain a definition for ToAlphaGroups 

       var items = ContactModel.CreateSampleData(); 
       data = items.ToAlphaGroups(x => x.Name); 

答えて

2

のために別のページにエラーが表示されます。

var items = await ContactModel.CreateSampleData(); 

あなたメソッドは今、タスクを返します。 エラーメッセージ。

+0

{ は { (データ== NULL) { VAR項目=はContactModel.CreateSampleDataを待つ場合()を得ます。 data = items.ToAlphaGroups(x => x.Name); } リターンデータ。 } } – mhmt93t

+0

メソッドの中でメソッドを待つことができ、同時にリストを返す方法はありませんか? – mhmt93t

+0

呼び出しメソッドが同期して実行されている場合、async/awaitを使用するとどうなりますか? GetFoldersAsyncの同期バージョンがない場合は、GetFoldersAsyncを同期して実行する必要があります。 –

0

Jan-Patric Ahnenの回答に同意する必要があるかどうかはわかりません。 には、タスクの「結果」を返すResultというプロパティがあります。Taskには、awaitをコードに追加できないと述べたので、TaskにはResultというプロパティがあります。あなたがResult使用する前に

var items = ContactModel.CreateSampleData().Result; 
data = items.ToAlphaGroups(x => x.Name); 

いくつかのこと:

  • Resultブロック呼び出し元のスレッドを、スレッドUIから呼び出された場合、アプリケーションが応答しなくなることがありますあなたはすべてのコストでResultを回避しようとしてください
  • Resultが予期しない結果を生成する可能性があるため、awaitを使用してください。コードは、私は公共のIListデータ に非同期(async)追加できないMethodeの内部にある
+0

私は結果を追加しましたが、あなたがアプリが通常の起動でデバッグとクラッシュで応答しなくなったと言ったように – mhmt93t

+0

ええ、 – Barnstokkr

関連する問題