2013-10-11 9 views
0

У меня есть модель:Асинхронные Ждут с настраиваемым типом C#

public class News 
{ 
    public int Id { get; set; } 
    public string Title { get; set; } 
    public string Body { get; set; } 
    public ObservableCollection<Comment> Comments { get; set; } 
} 

public class Comment 
{ 
    public int CommentId {get;set;} 
    public string CommentTitle{get;set;} 
    public string CommentBody{get;set;} 
} 


public class APIData() 
{ 

    public async Task<News> myNews() 
    { 
    var result = new News() 
    /// GET xmlDATA 

    var objComments = new ObservableCollection<Comment>(); 
    foreach(x in xmlData) 
    { 
     var objComment = new Comment(); 
    //////////// 
     objComments.Add(objComment); 
    } 
    result.Comments = objComments; 
    return result; 
} 

, когда я пытаюсь получить доступ к нему с помощью api.myNews().Comments; я сказала об ошибке;

System.Threading.Tasks.Task does not contain a definition for Comments and no extension method accept first argument of type System.Threading.Tasks.Task could be found.

Пожалуйста, дайте мне знать. об этом проблема.

ответ

3

Метод вернется в Task, который не содержит имущества с именем Comments.

Вы должны await в Task:

var news = await api.myNews(); 
var comments = news.Comments; 

Если метод context не async затем использовать Result.

var newsTask = api.myNews(); 
var comments = news.Result.Comments; 
+0

'ждут' к чему? 'myNews' будет выполняться синхронно. –

+0

Я получил эту ошибку: Оператор «ожидание» может использоваться только в методе async. Рассмотрите возможность маркировки этого метода с помощью модификатора «async» и изменения его типа возврата на «Задача» – UFO

+0

Это зависит от контекста метода. Если вы выполняете его внутри обработчика события, например, нажмите кнопку, а затем отметьте метод как асинхронный. В противном случае вам может потребоваться обработать «Задачу» синхронно. – Romoku

Смежные вопросы