C# 为什么可以';t使用任务<>;。结果属性?

C# 为什么可以';t使用任务<>;。结果属性?,c#,task,C#,Task,我的任务有问题。当我试图从任务接收返回的变量时,我不能使用.Result属性来获取它。这是我的密码: var nextElement = dir.GetValue(i++).ToString(); Task buffering = Task<byte[]>.Run(() => imageHashing(nextElement)); bitmapBuffer = buffering.Result; var nextElement=dir.GetValue(i++.ToStrin

我的任务有问题。当我试图从任务接收返回的变量时,我不能使用.Result属性来获取它。这是我的密码:

var nextElement = dir.GetValue(i++).ToString();
Task buffering = Task<byte[]>.Run(() => imageHashing(nextElement));
bitmapBuffer = buffering.Result;
var nextElement=dir.GetValue(i++.ToString();
Task buffering=Task.Run(()=>imageHashing(nextElement));
bitmapBuffer=buffering.Result;
imageHasing函数声明如下:
public bool[]imageHashing(字符串路径)

我听到一个错误,说:

严重性代码说明项目文件行抑制状态 错误CS1061“任务”不包含“结果”的定义,并且没有 扩展方法“Result”接受类型为“Task”的第一个参数 无法找到(是否缺少using指令或程序集 参考?)


来自works的示例,我不明白为什么。

您应该使用
Task
作为缓冲变量。未指定类型意味着该操作不应返回任何结果。

您应该使用
任务
作为缓冲变量。不指定类型意味着操作不应返回任何结果。

您应该将缓冲变量声明为
Task buffering=Task.Run(()=>imageHashing(nextElement))

您应该将缓冲变量声明为
Task buffering=Task.Run(()=>imageHashing(nextElement))

正如其他人所指出的,编译器错误在变量声明中(
任务
没有
结果
属性):

然而,这段代码也有问题。特别是,如果您只是要在当前线程完成之前阻止它,那么将工作启动到后台线程是没有意义的。您也可以直接调用该方法:

var nextElement = dir.GetValue(i++).ToString();
bitmapBuffer = imageHashing(nextElement);
或者,如果您在UI线程上并且不想阻止UI,则使用
wait
而不是
Result

var nextElement = dir.GetValue(i++).ToString();
bitmapBuffer = await Task.Run(() => imageHashing(nextElement));

正如其他人所指出的,编译器错误出现在变量声明中(
Task
没有
Result
属性):

然而,这段代码也有问题。特别是,如果您只是要在当前线程完成之前阻止它,那么将工作启动到后台线程是没有意义的。您也可以直接调用该方法:

var nextElement = dir.GetValue(i++).ToString();
bitmapBuffer = imageHashing(nextElement);
或者,如果您在UI线程上并且不想阻止UI,则使用
wait
而不是
Result

var nextElement = dir.GetValue(i++).ToString();
bitmapBuffer = await Task.Run(() => imageHashing(nextElement));

好消息,因为你在这里使用Task是完全没有意义的。您正在阻止当前线程,因此可以直接调用imageHashing并跳过Task.Run。您需要将其声明为
Task
。请参阅以获取解释。或者使用var instead意味着它不是完全没有意义的,它增加了生成线程池线程然后使用线程池的传统开销,因此它会使代码的效率大大降低。这是一个好消息,因为您在这里使用任务是完全没有意义的。您正在阻止当前线程,因此可以直接调用imageHashing并跳过Task.Run。您需要将其声明为
Task
。请参阅以获取解释。或者使用var instedi意味着它并非完全没有意义,它增加了生成线程池线程然后使用该线程的传统开销,因此它会使代码的效率大大降低