回答編集履歴

2 修正

mpyw

mpyw score 4794

2016/09/19 23:42  投稿

C#に詳しいわけではないですが,調べてみると「やっぱりそうか」と思える手法は見つかりました.staticなファクトリメソッドからprivateなコンストラクタを叩くようにすると良さそうです.
[c# - Can constructors be async? - Stack Overflow](http://stackoverflow.com/a/12520574/1846562)
### 追記
JavaScriptのノリで適当に書いてみました,あやふやな知識で書いた上にデバッグも全くしてないので,おかしいところがあれば指摘お願いします.
```C#
public class TaskListView : ListView
{
   public static async Task<TaskListView> BuildTaskListViewAsync()
   {
       var rootFolder = FileSystem.Current.LocalStorage;
       var files = await rootFolder.GetFilesAsync();
       var taskDataList = await Task.WhenAll(files.Select(async file => {
           var title = await file.ReadAllTextAsync();
           return new TaskData { Title = title };
       }));
       return new TaskListView(taskDataList);
   }
   private TaskListView(List<TaskData> taskDataList)
   {
       ItemsSource = taskDataList.Result;
       ItemsSource = taskDataList;
       var cell = new DataTemplate(typeof(TextCell));
       cell.SetBinding(TextCell.TextProperty, "Title");
       ItemTemplate = cell;
   }
}
```
1 追記

mpyw

mpyw score 4794

2016/09/19 23:05  投稿

C#に詳しいわけではないですが、調べてみると「やっぱりそうか」と思える手法は見つかりました。staticなファクトリメソッドからprivateなコンストラクタを叩くようにすると良さそうです。
C#に詳しいわけではないですが,調べてみると「やっぱりそうか」と思える手法は見つかりました.staticなファクトリメソッドからprivateなコンストラクタを叩くようにすると良さそうです.
[c# - Can constructors be async? - Stack Overflow](http://stackoverflow.com/a/12520574/1846562)
[c# - Can constructors be async? - Stack Overflow](http://stackoverflow.com/a/12520574/1846562)
### 追記
JavaScriptのノリで適当に書いてみました,あやふやな知識で書いた上にデバッグも全くしてないので,おかしいところがあれば指摘お願いします.
```C#
public class TaskListView : ListView
{
   public static async Task<TaskListView> BuildTaskListViewAsync()
   {
       var rootFolder = FileSystem.Current.LocalStorage;
       var files = await rootFolder.GetFilesAsync();
       var taskDataList = await Task.WhenAll(files.Select(async file => {
           var title = await file.ReadAllTextAsync();
           return new TaskData { Title = title };
       }));
       return new TaskListView(taskDataList);
   }
   private TaskListView(List<TaskData> taskDataList)
   {
       ItemsSource = taskDataList.Result;
       var cell = new DataTemplate(typeof(TextCell));
       cell.SetBinding(TextCell.TextProperty, "Title");
       ItemTemplate = cell;
   }
}
```

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る