Impossible de convertir implicitement le type 'int' à '...Tâches<int>'

si c'est asynchrone, il va revenir avec aucune erreur, pourquoi est-il de lancer une erreur sans être asynchrone, async est inutile dans cette opération.

public Task<int> countUp()
{
    string compare = txtTag.Text;
    int count = 0;
    for (int i = 0; i < dataGridView1.Rows.Count; i++)
    {
        if (compare == dataGridView1[0, i].Value.ToString())
        {
            BeginInvoke(new Action(() =>
            {
                count++;
                txtCount.Text = count.ToString();
            }));
        }
    }

    return count;
}
Pourquoi avez-vous besoin de retourner un Task<int> plutôt que juste un type normal int?
j'en ai besoin pour s'exécuter sur un autre thread. Comment transmettez-vous dans les instructions de l'INTERFACE utilisateur pour une tâche?
Vous semblez être à tort, l'impression qu'une méthode asynchrone fonctionne sur un autre thread. Il ne le fait pas. Une méthode asynchrone contient un asynchrone attendent et retourne immédiatement lorsque l'attendent arrive. Il a ensuite reprend là où il l'a laissée lorsque la valeur attendue est disponible. Assurez-vous de comprendre, c'est absolument pas le cas qu'une méthode asynchrone nécessairement s'exécute sur un autre thread; en fait, une des raisons qui nous avons ajouté des méthodes asynchrones à C# était de diminution la dépendance sur les threads comme un asynchronisme de mécanisme.
En regardant le code, il semble être à la fois la lecture et l'écriture des champs de contrôle; si c'est le cas, cette méthode ne peut être exécuté que sur le thread d'INTERFACE utilisateur. Franchement ce code semble très suspect. Ce que je ferais si j'étais vous, est démarrer une nouvelle question, décrire soigneusement ce que vous êtes en train de faire, et de demander de l'aide.

OriginalL'auteur ploxtic | 2013-03-17