C# 无法隐式转换类型';int';至';。。。任务<;int>';
如果这是异步的,它将返回没有错误,为什么它抛出一个错误而不是异步的,异步在这个操作中是没有价值的C# 无法隐式转换类型';int';至';。。。任务<;int>';,c#,task,C#,Task,如果这是异步的,它将返回没有错误,为什么它抛出一个错误而不是异步的,异步在这个操作中是没有价值的 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.
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;
}
public Task countUp()
{
字符串比较=txtTag.Text;
整数计数=0;
对于(int i=0;i
{
计数++;
txtCount.Text=count.ToString();
}));
}
}
返回计数;
}
正如错误明确指出的,您不能将int
作为任务返回。(除非将其设置为async
方法,该方法在编译时具有创建任务的魔力
如果您的方法不是异步的,那么首先就不应该返回任务。
相反,只需直接返回int
如果出于某种原因,您需要返回一个任务
,您可以调用任务.FromResult()
,以创建一个具有给定值的已完成任务。那么,您可以返回一个已完成的任务:
return Task.FromResult(count);
但是,为什么要返回任务还是有点神秘。从概念上讲,任务表示将来某个时候会发生某些事情的承诺。在您的情况下,它已经发生了,因此使用任务是完全没有意义的。此方法中没有任何东西表明它是异步方法,除了您已将其声明为返回任务
但是,您没有返回任务
,而是返回计数
,一个整数
由于您没有等待操作完成,因此我将删除任务
返回类型,并将其替换为justint
,因为此方法是完全同步的(您无论如何都不等待的部分除外).此处的代码显然不正确。请尝试查看代码中的返回类型。您返回的和int
与预期任务的返回类型不匹配。如果您不打算在此方法中使用async Wait,您可以将返回类型更改为int
但是,如果您坚持返回Task
而不是int
,则可以使用以下返回语句
return Task.FromResult(count)
这将把您的int
包装到任务中。有关任务的更多信息,请从result
访问:
为什么您需要返回一个任务,而不仅仅是一个普通的int
?我需要它在另一个线程上运行。如何将UI中的指令传递给任务?您似乎误以为异步方法在另一个线程上运行。它不是。异步方法包含异步等待,并返回im当等待发生时,它会立即恢复。当等待的值可用时,它会恢复到停止的位置。请确保您理解这一点;异步方法绝对不一定在另一个线程上运行;事实上,我们向C#添加异步方法的原因之一是为了减少对作为异步机制的线程的依赖。Lo看看你的代码,它似乎是读写控件的字段;如果是这样的话,这个方法可能只在UI线程上运行。坦率地说,这段代码看起来非常可疑。如果我是你,我会做的是开始一个新问题,仔细描述你正在尝试做什么,并请求帮助实现这一点。