C# 为什么可以';t使用任务<>;。结果属性?
我的任务有问题。当我试图从任务接收返回的变量时,我不能使用.Result属性来获取它。这是我的密码: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
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意味着它并非完全没有意义,它增加了生成线程池线程然后使用该线程的传统开销,因此它会使代码的效率大大降低