C# Tâche.ContinueWith questions
Je voudrais utiliser la Tâche cadre de .NET pour planifier quelque chose pour s'exécuter sur un autre thread, puis quand c'est fait poursuivre par une opération de mise à jour de l'INTERFACE utilisateur sur le thread de l'INTERFACE utilisateur. (Je n'ai pas joué à beaucoup encore, il n'est donc pas très familier pour moi.)
Voici le code:
Task<List<NewsItem>> fetchTask = new Task<List<NewsItem>>(() =>
{
List<NewsItem> items = Rss.FetchNewsItems(feed);
return items;
}).ContinueWith(x => UpdateNewsItems(x.Result),CancellationToken.None,TaskContinuationOptions.None,scheduler);
private void UpdateNewsItems(List<NewsItem> items)
{
...
}
Impossible de convertir implicitement le type de Système.Le filetage.Les tâches.La tâche' de 'Système.Le filetage.Les tâches.Tâche<Système.Les Collections.Génériques.Liste<Étincelle.Modèles.NewsItem>>". Une conversion explicite existe
J'ai pensé que si j'utilise le générique de la signature de la Liste<NewsItem> sur la tâche la Tâche.Résultat de retour de ce type afin que je puisse le transmettre à ma méthode...
Ce que je fais mal?
Ouais, n'était pas sorti quand j'ai écrit cela.
OriginalL'auteur Kelly | 2010-10-28
Vous devez vous connecter pour publier un commentaire.
Le problème est que, depuis votre lambda est un
Action<Task>
, ContinueWith renvoie uneTask
, et vous attribuez qu'àfetchTask
, qui est de typeTask<List<NewsItem>>
. Notez que l'affectation du résultat de l'ContinueWith
appel à la variable, et non pas le résultat de lanew Task<>
appel.Si vous faites quelque chose comme cela:
vous remarquerez qu'il y a un problème parce que votre lambda de type void, mais la tâche s'attend à un retour de
List<NewsItem>
. Donc, vous voulez probablement soit de retour à partir de votre UpdateNewsItems, ou de créer la tâche et ajouter la poursuite plus tard.OriginalL'auteur Philip Rieck